This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)

Confirmatory hypotheses (as specified in preregistration)

NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.

ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.

Hypothesis #1

Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."

Here are our results:

parameter b standard error df t p significant
(Intercept) 0.03 0.03 495 1.12 0.263
abs 0.21 0.03 495 6.55 <0.001 *
p7_ctry1 -0.32 0.06 495 -5.44 <0.001 *
p7_ctry2 0.79 0.06 495 13.58 <0.001 *
p7_ctry3 -0.11 0.06 495 -1.78 0.075
p7_ctry4 -0.95 0.06 495 -15.26 <0.001 *
scale1 0.00 0.02 495 -0.17 0.863
abs:p7_ctry1 0.04 0.05 495 0.72 0.474
abs:p7_ctry2 -0.01 0.07 495 -0.18 0.86
abs:p7_ctry3 0.12 0.07 495 1.79 0.073
abs:p7_ctry4 -0.04 0.07 495 -0.60 0.551
abs:scale1 -0.03 0.02 495 -1.52 0.129
p7_ctry1:scale1 -0.06 0.03 495 -1.86 0.064
p7_ctry2:scale1 0.04 0.03 495 1.14 0.255
p7_ctry3:scale1 0.07 0.04 495 1.99 0.047 *
p7_ctry4:scale1 -0.18 0.04 495 -4.90 <0.001 *
abs:p7_ctry1:scale1 -0.03 0.03 495 -0.88 0.381
abs:p7_ctry2:scale1 -0.03 0.04 495 -0.68 0.499
abs:p7_ctry3:scale1 0.00 0.04 495 -0.01 0.992
abs:p7_ctry4:scale1 0.04 0.04 495 0.87 0.387

We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2

Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
(Intercept) 0.07 0.04 495 1.80 0.073
por 0.38 0.04 495 10.20 <0.001 *
p7_ctry1 -0.19 0.06 495 -3.17 0.002 *
p7_ctry2 0.58 0.07 495 8.56 <0.001 *
p7_ctry3 -0.17 0.06 495 -2.74 0.006 *
p7_ctry4 -0.59 0.08 495 -7.34 <0.001 *
scale1 0.01 0.02 495 0.39 0.694
por:p7_ctry1 0.20 0.06 495 3.25 0.001 *
por:p7_ctry2 -0.08 0.07 495 -1.17 0.245
por:p7_ctry3 0.00 0.07 495 0.05 0.963
por:p7_ctry4 0.04 0.08 495 0.54 0.59
por:scale1 0.00 0.02 495 0.14 0.89
p7_ctry1:scale1 -0.08 0.04 495 -2.06 0.04 *
p7_ctry2:scale1 0.11 0.04 495 2.48 0.014 *
p7_ctry3:scale1 0.07 0.04 495 1.88 0.06
p7_ctry4:scale1 -0.12 0.05 495 -2.40 0.017 *
por:p7_ctry1:scale1 -0.03 0.04 495 -0.75 0.456
por:p7_ctry2:scale1 -0.14 0.04 495 -3.29 0.001 *
por:p7_ctry3:scale1 -0.01 0.05 495 -0.15 0.878
por:p7_ctry4:scale1 0.08 0.05 495 1.62 0.106

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.06 0.03 495 1.94 0.053
mm 0.26 0.03 495 7.60 <0.001 *
p7_ctry1 -0.18 0.06 495 -2.95 0.003 *
p7_ctry2 0.66 0.06 495 10.31 <0.001 *
p7_ctry3 -0.26 0.06 495 -4.58 <0.001 *
p7_ctry4 -0.75 0.07 495 -10.67 <0.001 *
scale1 0.01 0.02 495 0.39 0.693
mm:p7_ctry1 0.20 0.06 495 3.57 <0.001 *
mm:p7_ctry2 -0.07 0.06 495 -1.20 0.23
mm:p7_ctry3 -0.01 0.06 495 -0.14 0.888
mm:p7_ctry4 0.05 0.08 495 0.64 0.521
mm:scale1 -0.04 0.02 495 -2.14 0.033 *
p7_ctry1:scale1 -0.11 0.04 495 -3.11 0.002 *
p7_ctry2:scale1 0.10 0.04 495 2.66 0.008 *
p7_ctry3:scale1 0.07 0.03 495 2.10 0.036 *
p7_ctry4:scale1 -0.17 0.04 495 -3.96 <0.001 *
mm:p7_ctry1:scale1 -0.06 0.03 495 -1.83 0.068
mm:p7_ctry2:scale1 -0.09 0.04 495 -2.48 0.014 *
mm:p7_ctry3:scale1 0.01 0.04 495 0.28 0.778
mm:p7_ctry4:scale1 0.08 0.05 495 1.60 0.111

In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.38 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 6.33 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.79 points on the Spiritual Events scale (range: 0-80).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).

Hypothesis #3

Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.09 100 0.00 1
abs 0.30 0.09 100 3.40 <0.001 *
scale1 0.00 0.04 100 0.00 1
abs:scale1 -0.06 0.04 100 -1.67 0.097
Ghana
(Intercept) 0.00 0.08 98 0.00 1
abs 0.20 0.08 98 2.42 0.017 *
scale1 0.00 0.06 98 0.00 1
abs:scale1 0.00 0.06 98 -0.06 0.955
Thailand
(Intercept) 0.00 0.07 109 0.00 1
abs 0.40 0.08 109 5.31 <0.001 *
scale1 0.00 0.04 109 0.00 1
abs:scale1 -0.03 0.05 109 -0.61 0.546
China
(Intercept) 0.00 0.09 98 0.00 1
abs 0.26 0.09 98 3.00 0.003 *
scale1 0.00 0.04 98 0.00 1
abs:scale1 -0.02 0.04 98 -0.41 0.684
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
abs 0.15 0.08 90 1.74 0.085
scale1 0.00 0.06 90 0.00 1
abs:scale1 0.01 0.06 90 0.14 0.892

We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)

Hypothesis #4

Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
por 0.54 0.07 100 7.30 <0.001 *
scale1 0.00 0.04 100 0.00 1
por:scale1 -0.02 0.04 100 -0.49 0.628
Ghana
(Intercept) 0.00 0.08 98 0.00 1
por 0.29 0.08 98 3.64 <0.001 *
scale1 0.00 0.06 98 0.00 1
por:scale1 -0.06 0.06 98 -1.04 0.303
Thailand
(Intercept) 0.00 0.07 109 0.00 1
por 0.41 0.07 109 5.52 <0.001 *
scale1 0.00 0.05 109 0.00 1
por:scale1 0.00 0.05 109 0.10 0.917
China
(Intercept) 0.00 0.07 98 0.00 1
por 0.54 0.07 98 7.34 <0.001 *
scale1 0.00 0.04 98 0.00 1
por:scale1 0.05 0.04 98 1.14 0.257
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
por 0.19 0.08 90 2.25 0.027 *
scale1 0.00 0.06 90 0.00 1
por:scale1 0.11 0.06 90 1.83 0.07

Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.08 100 0.00 1
mm 0.49 0.08 100 6.36 <0.001 *
scale1 0.00 0.04 100 0.00 1
mm:scale1 -0.11 0.04 100 -2.93 0.004 *
Ghana
(Intercept) 0.00 0.08 98 0.00 1
mm 0.20 0.08 98 2.42 0.017 *
scale1 0.00 0.06 98 0.00 1
mm:scale1 -0.10 0.06 98 -1.88 0.062
Thailand
(Intercept) 0.00 0.08 109 0.00 1
mm 0.33 0.08 109 4.17 <0.001 *
scale1 0.00 0.04 109 0.00 1
mm:scale1 -0.04 0.05 109 -0.83 0.411
China
(Intercept) 0.00 0.08 98 0.00 1
mm 0.38 0.08 98 4.68 <0.001 *
scale1 0.00 0.04 98 0.00 1
mm:scale1 0.00 0.04 98 0.04 0.968
Vanuatu
(Intercept) 0.00 0.09 90 0.00 1
mm 0.09 0.09 90 1.07 0.288
scale1 0.00 0.06 90 0.00 1
mm:scale1 0.03 0.06 90 0.48 0.632

Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)

Secondary exploratory analyses

“Secular” experiences

From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”

Parallel to Hypothesis #1

parameter b standard error df t p significant
(Intercept) 0.01 0.03 495 0.34 0.731
abs 0.36 0.03 495 10.70 <0.001 *
p7_ctry1 0.14 0.06 495 2.26 0.025 *
p7_ctry2 0.24 0.06 495 3.74 <0.001 *
p7_ctry3 -0.05 0.07 495 -0.74 0.457
p7_ctry4 -0.23 0.07 495 -3.44 <0.001 *
scale1 0.00 0.03 495 0.06 0.949
abs:p7_ctry1 0.10 0.06 495 1.83 0.068
abs:p7_ctry2 -0.05 0.07 495 -0.75 0.451
abs:p7_ctry3 0.06 0.07 495 0.79 0.431
abs:p7_ctry4 0.04 0.07 495 0.50 0.617
abs:scale1 -0.01 0.03 495 -0.36 0.722
p7_ctry1:scale1 -0.25 0.05 495 -4.79 <0.001 *
p7_ctry2:scale1 -0.09 0.05 495 -1.62 0.107
p7_ctry3:scale1 0.19 0.06 495 3.37 <0.001 *
p7_ctry4:scale1 0.08 0.06 495 1.41 0.16
abs:p7_ctry1:scale1 0.00 0.05 495 0.00 0.999
abs:p7_ctry2:scale1 -0.05 0.06 495 -0.85 0.398
abs:p7_ctry3:scale1 0.04 0.06 495 0.71 0.481
abs:p7_ctry4:scale1 0.01 0.06 495 0.11 0.914

In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).

This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
(Intercept) 0.10 0.04 495 2.36 0.019 *
por 0.45 0.04 495 10.66 <0.001 *
p7_ctry1 0.22 0.07 495 3.21 0.001 *
p7_ctry2 0.04 0.08 495 0.53 0.596
p7_ctry3 -0.21 0.07 495 -3.01 0.003 *
p7_ctry4 0.38 0.09 495 4.06 <0.001 *
scale1 0.10 0.04 495 2.79 0.005 *
por:p7_ctry1 0.24 0.07 495 3.38 <0.001 *
por:p7_ctry2 -0.28 0.07 495 -3.77 <0.001 *
por:p7_ctry3 -0.08 0.08 495 -0.96 0.339
por:p7_ctry4 0.26 0.09 495 2.85 0.005 *
por:scale1 0.14 0.03 495 3.98 <0.001 *
p7_ctry1:scale1 -0.33 0.06 495 -5.79 <0.001 *
p7_ctry2:scale1 -0.20 0.06 495 -3.06 0.002 *
p7_ctry3:scale1 0.15 0.06 495 2.62 0.009 *
p7_ctry4:scale1 0.35 0.08 495 4.59 <0.001 *
por:p7_ctry1:scale1 -0.09 0.06 495 -1.53 0.127
por:p7_ctry2:scale1 -0.12 0.06 495 -1.93 0.054
por:p7_ctry3:scale1 0.08 0.07 495 1.16 0.248
por:p7_ctry4:scale1 0.33 0.07 495 4.45 <0.001 *

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.09 0.04 495 2.53 0.012 *
mm 0.31 0.04 495 7.92 <0.001 *
p7_ctry1 0.27 0.07 495 3.85 <0.001 *
p7_ctry2 0.05 0.07 495 0.65 0.515
p7_ctry3 -0.30 0.06 495 -4.64 <0.001 *
p7_ctry4 0.10 0.08 495 1.29 0.198
scale1 0.05 0.03 495 1.56 0.118
mm:p7_ctry1 0.29 0.06 495 4.48 <0.001 *
mm:p7_ctry2 -0.12 0.07 495 -1.83 0.067
mm:p7_ctry3 -0.08 0.07 495 -1.07 0.284
mm:p7_ctry4 0.22 0.10 495 2.27 0.023 *
mm:scale1 0.06 0.03 495 1.85 0.065
p7_ctry1:scale1 -0.30 0.06 495 -5.29 <0.001 *
p7_ctry2:scale1 -0.08 0.06 495 -1.39 0.165
p7_ctry3:scale1 0.15 0.05 495 2.80 0.005 *
p7_ctry4:scale1 0.19 0.07 495 2.93 0.004 *
mm:p7_ctry1:scale1 -0.06 0.05 495 -1.09 0.276
mm:p7_ctry2:scale1 -0.15 0.05 495 -2.69 0.007 *
mm:p7_ctry3:scale1 0.05 0.06 495 0.92 0.356
mm:p7_ctry4:scale1 0.24 0.08 495 3.11 0.002 *

In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 1.45 points on the Uncommon Events scale (range: 0-18) or 0.91 points on the Extrasensory scale (range: 0-7).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).

These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.38; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #3

Here are our results:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
abs 0.46 0.07 100 6.50 <0.001 *
scale1 0.00 0.05 100 0.00 1
abs:scale1 0.00 0.05 100 0.09 0.93
Ghana
(Intercept) 0.00 0.07 98 0.00 1
abs 0.28 0.07 98 4.02 <0.001 *
scale1 0.00 0.07 98 0.00 1
abs:scale1 -0.04 0.07 98 -0.55 0.583
Thailand
(Intercept) 0.00 0.07 109 0.00 1
abs 0.41 0.07 109 6.03 <0.001 *
scale1 0.00 0.06 109 0.00 1
abs:scale1 0.02 0.06 109 0.40 0.693
China
(Intercept) 0.00 0.07 98 0.00 1
abs 0.36 0.07 98 5.12 <0.001 *
scale1 0.00 0.06 98 0.00 1
abs:scale1 -0.07 0.06 98 -1.13 0.263
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
abs 0.27 0.08 90 3.37 0.001 *
scale1 0.00 0.06 90 0.00 1
abs:scale1 -0.02 0.06 90 -0.37 0.709

In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)

Parallel to Hypothesis #4

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
por 0.53 0.07 100 8.03 <0.001 *
scale1 0.00 0.05 100 0.00 1
por:scale1 0.06 0.05 100 1.07 0.286
Ghana
(Intercept) 0.00 0.07 98 0.00 1
por 0.15 0.07 98 2.10 0.038 *
scale1 0.00 0.07 98 0.00 1
por:scale1 0.03 0.07 98 0.41 0.685
Thailand
(Intercept) 0.00 0.07 109 0.00 1
por 0.32 0.07 109 4.37 <0.001 *
scale1 0.00 0.05 109 0.00 1
por:scale1 0.18 0.05 109 3.37 0.001 *
China
(Intercept) 0.00 0.06 98 0.00 1
por 0.46 0.06 98 7.13 <0.001 *
scale1 0.00 0.06 98 0.00 1
por:scale1 0.25 0.06 98 4.31 <0.001 *
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
por 0.23 0.08 90 2.80 0.006 *
scale1 0.00 0.06 90 0.00 1
por:scale1 -0.05 0.06 90 -0.87 0.384

In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
mm 0.52 0.07 100 7.82 <0.001 *
scale1 0.00 0.05 100 0.00 1
mm:scale1 0.02 0.05 100 0.35 0.726
Ghana
(Intercept) 0.00 0.07 98 0.00 1
mm 0.19 0.07 98 2.66 0.009 *
scale1 0.00 0.07 98 0.00 1
mm:scale1 -0.08 0.07 98 -1.18 0.242
Thailand
(Intercept) 0.00 0.07 109 0.00 1
mm 0.24 0.07 109 3.16 0.002 *
scale1 0.00 0.05 109 0.00 1
mm:scale1 0.11 0.05 109 2.02 0.046 *
China
(Intercept) 0.00 0.07 98 0.00 1
mm 0.33 0.07 98 4.58 <0.001 *
scale1 0.00 0.06 98 0.00 1
mm:scale1 0.14 0.06 98 2.30 0.024 *
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
mm 0.01 0.08 90 0.06 0.95
scale1 0.00 0.06 90 0.00 1
mm:scale1 -0.03 0.06 90 -0.47 0.636

In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)

“Control” scales (Hypothesis #5)

From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”

Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.

NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.

Here are our results using the Daily Spiritual Experiences scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.95 0.051
score 0.17 0.02 9.61 <0.001 *
predictorint_ctl 0.01 0.01 1.97 0.048 *
predictorabs_pmm -0.01 0.01 -1.02 0.309
predictorpor_mm 0.00 0.03 0.12 0.906
predictorhthk_wob 0.03 0.03 0.95 0.343
p7_ctry1 -0.37 0.03 -12.07 <0.001 *
p7_ctry2 0.79 0.03 25.22 <0.001 *
p7_ctry3 -0.11 0.04 -3.21 0.001 *
p7_ctry4 -0.96 0.03 -28.68 <0.001 *
score:predictorint_ctl 0.04 0.01 5.57 <0.001 *
score:predictorabs_pmm -0.04 0.01 -2.76 0.006 *
score:predictorpor_mm 0.08 0.03 2.91 0.004 *
score:predictorhthk_wob 0.02 0.03 0.72 0.473
score:p7_ctry1 0.10 0.03 3.64 <0.001 *
score:p7_ctry2 -0.06 0.03 -1.78 0.075
score:p7_ctry3 0.02 0.04 0.60 0.546
score:p7_ctry4 0.02 0.04 0.53 0.597
predictorint_ctl:p7_ctry1 0.03 0.01 2.12 0.034 *
predictorabs_pmm:p7_ctry1 -0.03 0.03 -1.24 0.214
predictorpor_mm:p7_ctry1 0.01 0.05 0.18 0.855
predictorhthk_wob:p7_ctry1 0.02 0.05 0.38 0.7
predictorint_ctl:p7_ctry2 -0.01 0.01 -1.04 0.298
predictorabs_pmm:p7_ctry2 0.04 0.03 1.35 0.176
predictorpor_mm:p7_ctry2 -0.04 0.05 -0.71 0.478
predictorhthk_wob:p7_ctry2 0.01 0.05 0.30 0.763
predictorint_ctl:p7_ctry3 0.00 0.02 0.22 0.826
predictorabs_pmm:p7_ctry3 0.03 0.03 1.27 0.206
predictorpor_mm:p7_ctry3 0.05 0.05 0.98 0.327
predictorhthk_wob:p7_ctry3 0.01 0.07 0.14 0.885
predictorint_ctl:p7_ctry4 0.02 0.01 1.43 0.153
predictorabs_pmm:p7_ctry4 -0.10 0.03 -3.45 <0.001 *
predictorpor_mm:p7_ctry4 0.10 0.06 1.70 0.089
predictorhthk_wob:p7_ctry4 -0.04 0.05 -0.91 0.361
score:predictorint_ctl:p7_ctry1 0.00 0.01 0.05 0.959
score:predictorabs_pmm:p7_ctry1 -0.05 0.02 -2.00 0.046 *
score:predictorpor_mm:p7_ctry1 0.02 0.05 0.34 0.733
score:predictorhthk_wob:p7_ctry1 -0.07 0.05 -1.46 0.145
score:predictorint_ctl:p7_ctry2 -0.04 0.01 -3.10 0.002 *
score:predictorabs_pmm:p7_ctry2 0.05 0.03 1.75 0.081
score:predictorpor_mm:p7_ctry2 -0.03 0.05 -0.56 0.574
score:predictorhthk_wob:p7_ctry2 -0.08 0.05 -1.64 0.101
score:predictorint_ctl:p7_ctry3 0.01 0.02 0.56 0.574
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.35 0.177
score:predictorpor_mm:p7_ctry3 0.00 0.05 -0.05 0.958
score:predictorhthk_wob:p7_ctry3 0.04 0.06 0.59 0.558
score:predictorint_ctl:p7_ctry4 0.03 0.02 2.13 0.033 *
score:predictorabs_pmm:p7_ctry4 -0.04 0.03 -1.38 0.166
score:predictorpor_mm:p7_ctry4 -0.01 0.06 -0.08 0.933
score:predictorhthk_wob:p7_ctry4 0.05 0.06 0.81 0.419

And here are our results using the Spiritual Events scale:

parameter b standard error t p significant
(Intercept) 0.05 0.02 2.55 0.011 *
score 0.19 0.02 8.68 <0.001 *
predictorint_ctl 0.00 0.01 -0.03 0.978
predictorabs_pmm -0.01 0.02 -0.39 0.696
predictorpor_mm 0.00 0.03 0.05 0.963
predictorhthk_wob -0.02 0.03 -0.57 0.57
p7_ctry1 -0.20 0.04 -5.62 <0.001 *
p7_ctry2 0.67 0.04 18.12 <0.001 *
p7_ctry3 -0.26 0.04 -6.17 <0.001 *
p7_ctry4 -0.64 0.04 -16.21 <0.001 *
score:predictorint_ctl 0.06 0.01 6.62 <0.001 *
score:predictorabs_pmm -0.03 0.02 -2.02 0.043 *
score:predictorpor_mm 0.03 0.03 1.03 0.301
score:predictorhthk_wob 0.08 0.04 2.29 0.022 *
score:p7_ctry1 0.12 0.03 3.42 <0.001 *
score:p7_ctry2 -0.02 0.04 -0.60 0.548
score:p7_ctry3 0.07 0.04 1.72 0.085
score:p7_ctry4 -0.06 0.04 -1.37 0.17
predictorint_ctl:p7_ctry1 0.03 0.02 2.04 0.041 *
predictorabs_pmm:p7_ctry1 -0.05 0.03 -1.77 0.077
predictorpor_mm:p7_ctry1 -0.02 0.06 -0.43 0.664
predictorhthk_wob:p7_ctry1 0.00 0.06 -0.06 0.952
predictorint_ctl:p7_ctry2 -0.04 0.02 -2.55 0.011 *
predictorabs_pmm:p7_ctry2 0.08 0.03 2.51 0.012 *
predictorpor_mm:p7_ctry2 -0.04 0.06 -0.67 0.505
predictorhthk_wob:p7_ctry2 -0.03 0.06 -0.47 0.641
predictorint_ctl:p7_ctry3 0.00 0.02 0.07 0.942
predictorabs_pmm:p7_ctry3 0.03 0.03 1.05 0.296
predictorpor_mm:p7_ctry3 0.04 0.06 0.79 0.428
predictorhthk_wob:p7_ctry3 -0.02 0.08 -0.27 0.786
predictorint_ctl:p7_ctry4 0.02 0.02 1.21 0.226
predictorabs_pmm:p7_ctry4 -0.08 0.04 -2.27 0.023 *
predictorpor_mm:p7_ctry4 0.06 0.07 0.80 0.426
predictorhthk_wob:p7_ctry4 -0.01 0.06 -0.20 0.841
score:predictorint_ctl:p7_ctry1 0.03 0.01 2.44 0.015 *
score:predictorabs_pmm:p7_ctry1 -0.06 0.03 -2.14 0.033 *
score:predictorpor_mm:p7_ctry1 -0.02 0.06 -0.31 0.755
score:predictorhthk_wob:p7_ctry1 -0.04 0.06 -0.78 0.434
score:predictorint_ctl:p7_ctry2 0.03 0.02 1.76 0.078
score:predictorabs_pmm:p7_ctry2 -0.01 0.03 -0.25 0.801
score:predictorpor_mm:p7_ctry2 0.02 0.06 0.38 0.707
score:predictorhthk_wob:p7_ctry2 0.00 0.06 0.06 0.954
score:predictorint_ctl:p7_ctry3 -0.02 0.02 -1.02 0.308
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.18 0.237
score:predictorpor_mm:p7_ctry3 0.01 0.06 0.24 0.813
score:predictorhthk_wob:p7_ctry3 -0.08 0.07 -1.09 0.276
score:predictorint_ctl:p7_ctry4 0.01 0.02 0.36 0.722
score:predictorabs_pmm:p7_ctry4 -0.01 0.04 -0.38 0.706
score:predictorpor_mm:p7_ctry4 -0.01 0.08 -0.08 0.938
score:predictorhthk_wob:p7_ctry4 0.02 0.07 0.25 0.805

In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.

“Control” scales, without reverse coding

The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.

In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.

Collapsing across sites

Here are our results using the Daily Spiritual Experiences scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.94 0.052
score 0.18 0.02 10.57 <0.001 *
predictorint_ctl 0.01 0.01 2.16 0.031 *
predictorabs_pmm -0.01 0.01 -1.02 0.308
predictorpor_mm 0.00 0.03 0.12 0.906
predictorhthk_wob 0.02 0.02 0.90 0.37
p7_ctry1 -0.35 0.03 -11.84 <0.001 *
p7_ctry2 0.79 0.03 26.04 <0.001 *
p7_ctry3 -0.10 0.03 -3.19 0.001 *
p7_ctry4 -0.96 0.03 -28.80 <0.001 *
score:predictorint_ctl 0.04 0.01 6.03 <0.001 *
score:predictorabs_pmm -0.04 0.01 -2.76 0.006 *
score:predictorpor_mm 0.08 0.03 2.92 0.004 *
score:predictorhthk_wob 0.08 0.03 3.14 0.002 *
score:p7_ctry1 0.07 0.03 2.57 0.01 *
score:p7_ctry2 -0.06 0.03 -1.95 0.052
score:p7_ctry3 0.04 0.03 1.33 0.183
score:p7_ctry4 0.01 0.04 0.36 0.721
predictorint_ctl:p7_ctry1 0.02 0.01 1.50 0.135
predictorabs_pmm:p7_ctry1 -0.03 0.03 -1.25 0.213
predictorpor_mm:p7_ctry1 0.01 0.05 0.18 0.855
predictorhthk_wob:p7_ctry1 -0.01 0.05 -0.26 0.795
predictorint_ctl:p7_ctry2 -0.02 0.01 -1.24 0.217
predictorabs_pmm:p7_ctry2 0.04 0.03 1.36 0.175
predictorpor_mm:p7_ctry2 -0.04 0.05 -0.71 0.477
predictorhthk_wob:p7_ctry2 -0.03 0.05 -0.59 0.557
predictorint_ctl:p7_ctry3 -0.01 0.01 -0.44 0.663
predictorabs_pmm:p7_ctry3 0.03 0.03 1.27 0.204
predictorpor_mm:p7_ctry3 0.05 0.05 0.98 0.325
predictorhthk_wob:p7_ctry3 0.03 0.05 0.64 0.525
predictorint_ctl:p7_ctry4 0.02 0.01 1.19 0.236
predictorabs_pmm:p7_ctry4 -0.10 0.03 -3.46 <0.001 *
predictorpor_mm:p7_ctry4 0.10 0.06 1.71 0.088
predictorhthk_wob:p7_ctry4 -0.04 0.05 -0.88 0.378
score:predictorint_ctl:p7_ctry1 0.02 0.01 1.42 0.155
score:predictorabs_pmm:p7_ctry1 -0.05 0.02 -2.00 0.045 *
score:predictorpor_mm:p7_ctry1 0.02 0.05 0.34 0.732
score:predictorhthk_wob:p7_ctry1 -0.12 0.05 -2.55 0.011 *
score:predictorint_ctl:p7_ctry2 -0.04 0.01 -3.37 <0.001 *
score:predictorabs_pmm:p7_ctry2 0.05 0.03 1.75 0.08
score:predictorpor_mm:p7_ctry2 -0.03 0.05 -0.56 0.573
score:predictorhthk_wob:p7_ctry2 -0.05 0.04 -1.18 0.24
score:predictorint_ctl:p7_ctry3 0.00 0.01 -0.19 0.847
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.35 0.176
score:predictorpor_mm:p7_ctry3 0.00 0.05 -0.05 0.957
score:predictorhthk_wob:p7_ctry3 0.00 0.05 -0.01 0.992
score:predictorint_ctl:p7_ctry4 0.04 0.01 2.41 0.016 *
score:predictorabs_pmm:p7_ctry4 -0.04 0.03 -1.39 0.165
score:predictorpor_mm:p7_ctry4 -0.01 0.06 -0.08 0.933
score:predictorhthk_wob:p7_ctry4 0.03 0.06 0.51 0.609

And here are our results using the Spiritual Events scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.54 0.123
score 0.20 0.02 10.10 <0.001 *
predictorint_ctl 0.01 0.01 1.35 0.176
predictorabs_pmm -0.01 0.02 -0.39 0.693
predictorpor_mm 0.00 0.03 0.05 0.962
predictorhthk_wob -0.01 0.03 -0.29 0.771
p7_ctry1 -0.18 0.04 -5.22 <0.001 *
p7_ctry2 0.66 0.04 18.57 <0.001 *
p7_ctry3 -0.25 0.04 -7.22 <0.001 *
p7_ctry4 -0.62 0.04 -15.94 <0.001 *
score:predictorint_ctl 0.05 0.01 6.67 <0.001 *
score:predictorabs_pmm -0.03 0.02 -2.04 0.041 *
score:predictorpor_mm 0.03 0.03 1.04 0.297
score:predictorhthk_wob 0.13 0.03 4.46 <0.001 *
score:p7_ctry1 0.10 0.03 3.07 0.002 *
score:p7_ctry2 0.00 0.03 -0.02 0.984
score:p7_ctry3 0.07 0.04 1.71 0.088
score:p7_ctry4 -0.07 0.04 -1.61 0.108
predictorint_ctl:p7_ctry1 0.02 0.01 1.40 0.161
predictorabs_pmm:p7_ctry1 -0.05 0.03 -1.79 0.074
predictorpor_mm:p7_ctry1 -0.02 0.06 -0.44 0.661
predictorhthk_wob:p7_ctry1 -0.04 0.06 -0.73 0.467
predictorint_ctl:p7_ctry2 -0.04 0.01 -2.45 0.014 *
predictorabs_pmm:p7_ctry2 0.08 0.03 2.54 0.011 *
predictorpor_mm:p7_ctry2 -0.04 0.06 -0.67 0.501
predictorhthk_wob:p7_ctry2 -0.04 0.05 -0.69 0.492
predictorint_ctl:p7_ctry3 0.00 0.01 -0.02 0.984
predictorabs_pmm:p7_ctry3 0.03 0.03 1.06 0.291
predictorpor_mm:p7_ctry3 0.04 0.06 0.80 0.423
predictorhthk_wob:p7_ctry3 0.05 0.06 0.85 0.396
predictorint_ctl:p7_ctry4 0.01 0.02 0.53 0.595
predictorabs_pmm:p7_ctry4 -0.08 0.04 -2.29 0.022 *
predictorpor_mm:p7_ctry4 0.06 0.07 0.80 0.422
predictorhthk_wob:p7_ctry4 -0.01 0.05 -0.26 0.796
score:predictorint_ctl:p7_ctry1 0.04 0.01 3.03 0.002 *
score:predictorabs_pmm:p7_ctry1 -0.06 0.03 -2.15 0.031 *
score:predictorpor_mm:p7_ctry1 -0.02 0.05 -0.32 0.753
score:predictorhthk_wob:p7_ctry1 -0.03 0.05 -0.62 0.534
score:predictorint_ctl:p7_ctry2 0.02 0.01 1.17 0.241
score:predictorabs_pmm:p7_ctry2 -0.01 0.03 -0.25 0.8
score:predictorpor_mm:p7_ctry2 0.02 0.06 0.38 0.704
score:predictorhthk_wob:p7_ctry2 0.06 0.05 1.20 0.232
score:predictorint_ctl:p7_ctry3 -0.01 0.02 -0.94 0.348
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.19 0.233
score:predictorpor_mm:p7_ctry3 0.01 0.06 0.24 0.812
score:predictorhthk_wob:p7_ctry3 -0.11 0.06 -1.80 0.072
score:predictorint_ctl:p7_ctry4 0.01 0.02 0.62 0.534
score:predictorabs_pmm:p7_ctry4 -0.01 0.04 -0.38 0.704
score:predictorpor_mm:p7_ctry4 -0.01 0.08 -0.08 0.937
score:predictorhthk_wob:p7_ctry4 -0.04 0.07 -0.64 0.523

Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results for the Daily Spiritual Experiences scale:

parameter b standard error t p significant
US
(Intercept) -0.01 0.04 -0.16 0.871
score 0.26 0.04 6.06 <0.001 *
predictorint_ctl 0.00 0.02 0.20 0.842
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob -0.01 0.07 -0.20 0.844
score:predictorint_ctl 0.06 0.02 3.44 <0.001 *
score:predictorabs_pmm -0.07 0.04 -1.91 0.057
score:predictorpor_mm 0.07 0.07 1.04 0.298
score:predictorhthk_wob -0.04 0.07 -0.53 0.598
Ghana
(Intercept) -0.01 0.04 -0.21 0.836
score 0.19 0.04 4.18 <0.001 *
predictorint_ctl 0.00 0.02 0.25 0.801
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.02 0.984
score:predictorint_ctl -0.01 0.02 -0.39 0.695
score:predictorabs_pmm 0.01 0.04 0.28 0.779
score:predictorpor_mm 0.07 0.07 0.97 0.331
score:predictorhthk_wob 0.07 0.07 0.98 0.326
Thailand
(Intercept) 0.00 0.04 0.00 1
score 0.27 0.04 6.53 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob 0.00 0.06 0.00 1
score:predictorint_ctl 0.05 0.02 2.78 0.006 *
score:predictorabs_pmm 0.01 0.04 0.17 0.863
score:predictorpor_mm 0.06 0.06 0.98 0.327
score:predictorhthk_wob 0.10 0.06 1.51 0.132
China
(Intercept) 0.00 0.04 0.00 1
score 0.23 0.04 5.45 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.00 1
score:predictorint_ctl 0.09 0.02 5.03 <0.001 *
score:predictorabs_pmm -0.08 0.04 -2.10 0.037 *
score:predictorpor_mm 0.10 0.07 1.49 0.137
score:predictorhthk_wob 0.14 0.07 2.12 0.034 *
Vanuatu
(Intercept) 0.00 0.05 -0.04 0.967
score 0.11 0.05 2.42 0.016 *
predictorint_ctl 0.00 0.02 0.05 0.96
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.01 0.07 0.14 0.893
score:predictorint_ctl 0.04 0.02 2.10 0.036 *
score:predictorabs_pmm -0.02 0.04 -0.42 0.674
score:predictorpor_mm 0.09 0.07 1.22 0.223
score:predictorhthk_wob 0.27 0.07 3.67 <0.001 *

Here are our results for the Daily Spiritual Experiences scale:

parameter b standard error t p significant
US
(Intercept) 0.00 0.04 -0.10 0.919
score 0.31 0.04 7.58 <0.001 *
predictorint_ctl 0.00 0.02 0.12 0.901
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob -0.01 0.07 -0.09 0.925
score:predictorint_ctl 0.10 0.02 5.85 <0.001 *
score:predictorabs_pmm -0.07 0.04 -1.98 0.048 *
score:predictorpor_mm -0.02 0.06 -0.33 0.742
score:predictorhthk_wob 0.10 0.07 1.54 0.123
Ghana
(Intercept) -0.01 0.04 -0.23 0.821
score 0.17 0.04 3.92 <0.001 *
predictorint_ctl 0.00 0.02 0.28 0.782
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 -0.04 0.969
score:predictorint_ctl 0.06 0.02 3.09 0.002 *
score:predictorabs_pmm -0.04 0.04 -1.03 0.304
score:predictorpor_mm 0.02 0.07 0.31 0.756
score:predictorhthk_wob 0.20 0.07 2.84 0.005 *
Thailand
(Intercept) 0.00 0.04 0.00 1
score 0.31 0.04 7.64 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob 0.00 0.06 0.00 1
score:predictorint_ctl 0.05 0.02 2.74 0.006 *
score:predictorabs_pmm 0.01 0.04 0.37 0.708
score:predictorpor_mm 0.02 0.06 0.34 0.738
score:predictorhthk_wob 0.03 0.06 0.47 0.637
China
(Intercept) 0.00 0.04 0.00 1
score 0.20 0.04 4.59 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.00 1
score:predictorint_ctl 0.09 0.02 5.34 <0.001 *
score:predictorabs_pmm -0.05 0.04 -1.33 0.183
score:predictorpor_mm 0.05 0.07 0.77 0.444
score:predictorhthk_wob 0.14 0.07 2.13 0.033 *
Vanuatu
(Intercept) -0.01 0.05 -0.31 0.76
score 0.09 0.05 1.87 0.062
predictorint_ctl 0.01 0.02 0.37 0.709
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.01 0.07 0.19 0.851
score:predictorint_ctl 0.00 0.02 0.22 0.824
score:predictorabs_pmm 0.02 0.04 0.55 0.585
score:predictorpor_mm 0.01 0.07 0.12 0.902
score:predictorhthk_wob 0.23 0.07 3.07 0.002 *

In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).

Beyond the preregistration

Combined effects of absorption and porosity on spiritual experiences (absorption controlling for porosity & vice versa)

Collapsing across sites

Here I examine a big model, in which both absorption and porosity together predict spiritual experiences. This allows us to look at the effect of absorption controlling for porosity, the effect of porosity controlling for absorption, and the possibility of an interaction between absorption and porosity. I look at porosity as indexed by the Porosity (Dulin) scale and as indexed by the Martha Story separately, and use both the Daily Spiritual Experience and Spiritual Events scales to index spiritual experience.

Here are our results using the Porosity (Dulin) scale:

parameter b standard error df t p significant
(Intercept) 0.07 0.04 485 1.81 0.07
abs 0.14 0.04 485 3.39 <0.001 *
por 0.33 0.04 485 8.07 <0.001 *
p7_ctry1 -0.21 0.06 485 -3.26 0.001 *
p7_ctry2 0.60 0.07 485 8.67 <0.001 *
p7_ctry3 -0.07 0.07 485 -1.10 0.27
p7_ctry4 -0.71 0.10 485 -6.81 <0.001 *
scale1 0.01 0.03 485 0.44 0.661
abs:por 0.04 0.04 485 1.06 0.288
abs:p7_ctry1 0.01 0.06 485 0.10 0.919
abs:p7_ctry2 0.03 0.07 485 0.36 0.72
abs:p7_ctry3 0.13 0.07 485 1.90 0.058
abs:p7_ctry4 0.02 0.10 485 0.17 0.862
por:p7_ctry1 0.20 0.06 485 3.21 0.001 *
por:p7_ctry2 -0.05 0.07 485 -0.79 0.427
por:p7_ctry3 0.01 0.08 485 0.14 0.886
por:p7_ctry4 0.01 0.09 485 0.12 0.905
abs:scale1 -0.04 0.03 485 -1.37 0.172
por:scale1 0.01 0.03 485 0.24 0.811
p7_ctry1:scale1 -0.08 0.04 485 -1.93 0.054
p7_ctry2:scale1 0.09 0.05 485 2.04 0.042 *
p7_ctry3:scale1 0.06 0.04 485 1.39 0.164
p7_ctry4:scale1 -0.09 0.07 485 -1.30 0.194
abs:por:p7_ctry1 -0.03 0.06 485 -0.57 0.572
abs:por:p7_ctry2 -0.12 0.07 485 -1.76 0.079
abs:por:p7_ctry3 0.01 0.08 485 0.07 0.941
abs:por:p7_ctry4 0.07 0.09 485 0.72 0.473
abs:por:scale1 -0.03 0.03 485 -1.34 0.182
abs:p7_ctry1:scale1 -0.02 0.04 485 -0.47 0.641
abs:p7_ctry2:scale1 -0.01 0.05 485 -0.21 0.834
abs:p7_ctry3:scale1 -0.02 0.05 485 -0.50 0.619
abs:p7_ctry4:scale1 -0.02 0.07 485 -0.26 0.798
por:p7_ctry1:scale1 -0.02 0.04 485 -0.37 0.712
por:p7_ctry2:scale1 -0.14 0.04 485 -3.09 0.002 *
por:p7_ctry3:scale1 -0.06 0.05 485 -1.21 0.226
por:p7_ctry4:scale1 0.11 0.06 485 1.75 0.08
abs:por:p7_ctry1:scale1 0.03 0.04 485 0.81 0.419
abs:por:p7_ctry2:scale1 0.09 0.05 485 1.85 0.064
abs:por:p7_ctry3:scale1 -0.09 0.05 485 -1.63 0.103
abs:por:p7_ctry4:scale1 -0.01 0.06 485 -0.11 0.911

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.07 0.03 485 2.12 0.034 *
abs 0.18 0.04 485 5.12 <0.001 *
mm 0.22 0.04 485 6.23 <0.001 *
p7_ctry1 -0.19 0.06 485 -3.07 0.002 *
p7_ctry2 0.70 0.07 485 10.74 <0.001 *
p7_ctry3 -0.16 0.06 485 -2.58 0.01 *
p7_ctry4 -0.85 0.08 485 -11.06 <0.001 *
scale1 0.01 0.02 485 0.66 0.509
abs:mm 0.00 0.04 485 0.05 0.961
abs:p7_ctry1 -0.08 0.06 485 -1.36 0.173
abs:p7_ctry2 0.02 0.07 485 0.29 0.775
abs:p7_ctry3 0.09 0.07 485 1.31 0.192
abs:p7_ctry4 0.03 0.09 485 0.39 0.698
mm:p7_ctry1 0.19 0.06 485 3.28 0.001 *
mm:p7_ctry2 -0.07 0.06 485 -1.13 0.26
mm:p7_ctry3 -0.01 0.07 485 -0.19 0.848
mm:p7_ctry4 0.04 0.09 485 0.42 0.678
abs:scale1 -0.03 0.02 485 -1.54 0.125
mm:scale1 -0.05 0.02 485 -2.21 0.028 *
p7_ctry1:scale1 -0.10 0.04 485 -2.51 0.013 *
p7_ctry2:scale1 0.09 0.04 485 2.16 0.031 *
p7_ctry3:scale1 0.07 0.04 485 1.89 0.06
p7_ctry4:scale1 -0.17 0.05 485 -3.58 <0.001 *
abs:mm:p7_ctry1 -0.01 0.05 485 -0.24 0.808
abs:mm:p7_ctry2 -0.14 0.07 485 -2.15 0.032 *
abs:mm:p7_ctry3 0.06 0.07 485 0.90 0.366
abs:mm:p7_ctry4 0.13 0.10 485 1.29 0.196
abs:mm:scale1 -0.01 0.02 485 -0.53 0.599
abs:p7_ctry1:scale1 -0.01 0.04 485 -0.38 0.705
abs:p7_ctry2:scale1 0.01 0.04 485 0.15 0.884
abs:p7_ctry3:scale1 0.01 0.04 485 0.29 0.769
abs:p7_ctry4:scale1 0.02 0.05 485 0.39 0.7
mm:p7_ctry1:scale1 -0.05 0.04 485 -1.34 0.182
mm:p7_ctry2:scale1 -0.08 0.04 485 -2.13 0.033 *
mm:p7_ctry3:scale1 -0.02 0.04 485 -0.42 0.674
mm:p7_ctry4:scale1 0.09 0.05 485 1.73 0.084
abs:mm:p7_ctry1:scale1 -0.03 0.03 485 -1.03 0.304
abs:mm:p7_ctry2:scale1 0.04 0.04 485 0.99 0.321
abs:mm:p7_ctry3:scale1 -0.07 0.04 485 -1.69 0.091
abs:mm:p7_ctry4:scale1 -0.02 0.06 485 -0.29 0.772

In both cases, we see evidence for absorption and porosity being positively related to spiritual experiences even after controlling for each other: The relationship between absorption and spiritual experience was significantly positive, controlling for porosity; and the effect of porosity (as indexed by either the Dulin scale or the Martha Story scale) and spiritual experience was also significantly positive, controlling for absorption. There was no strong evidence of an interactive effect of absorption and porosity in either case (see bolded rows in tables above).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results using the Porosity (Dulin) scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 98 -0.04 0.97
abs 0.18 0.08 98 2.33 0.022 *
por 0.50 0.08 98 6.60 <0.001 *
scale1 0.00 0.04 98 0.03 0.973
abs:por 0.01 0.07 98 0.16 0.87
abs:scale1 -0.06 0.04 98 -1.58 0.117
por:scale1 0.00 0.04 98 -0.08 0.939
abs:por:scale1 -0.01 0.04 98 -0.15 0.884
Ghana
(Intercept) 0.02 0.08 96 0.20 0.845
abs 0.12 0.08 96 1.54 0.128
por 0.26 0.08 96 3.18 0.002 *
scale1 -0.01 0.06 96 -0.12 0.908
abs:por -0.06 0.08 96 -0.85 0.399
abs:scale1 0.02 0.06 96 0.27 0.785
por:scale1 -0.06 0.06 96 -1.07 0.289
abs:por:scale1 0.03 0.06 96 0.50 0.618
Thailand
(Intercept) -0.01 0.07 107 -0.13 0.898
abs 0.32 0.07 107 4.47 <0.001 *
por 0.34 0.07 107 4.83 <0.001 *
scale1 0.02 0.05 107 0.53 0.594
abs:por 0.04 0.07 107 0.59 0.553
abs:scale1 -0.02 0.05 107 -0.33 0.739
por:scale1 0.01 0.05 107 0.16 0.875
abs:por:scale1 -0.11 0.04 107 -2.46 0.015 *
China
(Intercept) -0.04 0.08 96 -0.50 0.617
abs 0.12 0.08 96 1.59 0.116
por 0.48 0.08 96 6.08 <0.001 *
scale1 0.02 0.05 96 0.40 0.691
abs:por 0.12 0.07 96 1.68 0.097
abs:scale1 -0.05 0.05 96 -1.05 0.297
por:scale1 0.08 0.05 96 1.61 0.111
abs:por:scale1 -0.06 0.04 96 -1.33 0.187
Vanuatu
(Intercept) -0.02 0.09 88 -0.25 0.8
abs 0.11 0.09 88 1.30 0.197
por 0.17 0.09 88 2.01 0.047 *
scale1 0.01 0.06 88 0.11 0.912
abs:por 0.10 0.08 88 1.17 0.246
abs:scale1 -0.02 0.06 88 -0.27 0.789
por:scale1 0.11 0.06 88 1.78 0.079
abs:por:scale1 -0.03 0.06 88 -0.51 0.613

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.01 0.08 98 0.06 0.949
abs 0.13 0.08 98 1.61 0.111
mm 0.45 0.08 98 5.37 <0.001 *
scale1 0.02 0.04 98 0.54 0.589
abs:mm -0.01 0.08 98 -0.19 0.852
abs:scale1 -0.04 0.04 98 -0.87 0.387
mm:scale1 -0.10 0.04 98 -2.43 0.017 *
abs:mm:scale1 -0.06 0.04 98 -1.57 0.119
Ghana
(Intercept) 0.04 0.08 96 0.46 0.646
abs 0.13 0.08 96 1.61 0.111
mm 0.15 0.08 96 1.88 0.064
scale1 0.00 0.06 96 0.04 0.966
abs:mm -0.15 0.08 96 -1.80 0.076
abs:scale1 0.02 0.06 96 0.40 0.689
mm:scale1 -0.11 0.06 96 -1.92 0.058
abs:mm:scale1 -0.01 0.06 96 -0.17 0.869
Thailand
(Intercept) -0.02 0.07 107 -0.26 0.797
abs 0.32 0.08 107 4.26 <0.001 *
mm 0.23 0.08 107 3.05 0.003 *
scale1 0.03 0.05 107 0.56 0.575
abs:mm 0.07 0.07 107 0.98 0.329
abs:scale1 0.00 0.05 107 -0.10 0.918
mm:scale1 -0.03 0.05 107 -0.62 0.54
abs:mm:scale1 -0.09 0.04 107 -2.14 0.035 *
China
(Intercept) -0.01 0.08 96 -0.17 0.862
abs 0.24 0.08 96 2.97 0.004 *
mm 0.37 0.08 96 4.70 <0.001 *
scale1 0.00 0.04 96 0.10 0.917
abs:mm 0.14 0.08 96 1.70 0.092
abs:scale1 -0.02 0.04 96 -0.50 0.619
mm:scale1 0.00 0.04 96 0.00 1
abs:mm:scale1 -0.05 0.05 96 -1.02 0.311
Vanuatu
(Intercept) 0.00 0.09 88 0.04 0.97
abs 0.14 0.09 88 1.63 0.106
mm 0.07 0.09 88 0.82 0.414
scale1 -0.01 0.06 88 -0.14 0.885
abs:mm -0.03 0.08 88 -0.32 0.752
abs:scale1 0.00 0.06 88 -0.03 0.974
mm:scale1 0.04 0.06 88 0.60 0.55
abs:mm:scale1 0.07 0.06 88 1.22 0.225

In both cases, we see some evidence for porosity “swamping out” the effect of absorption in some sites, including Ghana, China, and Vanuatu when porosity is indexed by the Porosity (Dulin) scale; and the US, Ghana, and Vanuatu when porosity is indexed by the Martha Story scale (in fact, in this second set of analyses, neither Absorption nor Martha Story ends up being a significant predictor of spiritual experience in Ghana or Vanuatu).

Absorption as primarily individual difference, porosity as primarily cultural difference?

In our theorizing, we often assume that absorption is primarily an individual difference, while porosity is primarily a cultural difference—or at least that absorption is more of an individual difference than is porosity. Do we see any evidence of this in this dataset?

Do individuals vary more in absorption than porosity?

The first way I thought of to approach this question is to look at the degree to which individuals vary in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that absorption would vary more across individuals than either of the porosity indices (after resclaing all threee scales to have the same range, within each site).

[1] "Absorption vs. Porosity (Dulin)"
[1] "Overall"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.16827, df = 1, p-value = 0.6817

[1] "US"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.35391, df = 1, p-value = 0.5519

[1] "Ghana"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 3.2876, df = 1, p-value = 0.0698

[1] "Thailand"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.46254, df = 1, p-value = 0.4964

[1] "China"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.00084535, df = 1, p-value = 0.9768

[1] "Vanuatu"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 9.996, df = 1, p-value = 0.001569
[1] "Absorption vs. Martha Story"
[1] "Overall"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.16827, df = 1, p-value = 0.6817

[1] "US"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.63721, df = 1, p-value = 0.4247

[1] "Ghana"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 3.8497, df = 1, p-value = 0.04976

[1] "Thailand"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 1.089, df = 1, p-value = 0.2967

[1] "China"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 3.9359, df = 1, p-value = 0.04726

[1] "Vanuatu"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 6.5318, df = 1, p-value = 0.0106
[1] "Dulin vs. Martha Story"
[1] "Overall"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.16827, df = 1, p-value = 0.6817

[1] "US"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.041448, df = 1, p-value = 0.8387

[1] "Ghana"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.022569, df = 1, p-value = 0.8806

[1] "Thailand"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.13252, df = 1, p-value = 0.7158

[1] "China"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 4.051, df = 1, p-value = 0.04415

[1] "Vanuatu"

    Bartlett test of homogeneity of variances

data:  score by scale
Bartlett's K-squared = 0.38374, df = 1, p-value = 0.5356

According to Bartlett tests of homogeneity of variances, the only site where we see the pattern that we’d expect is Vanuatu: Individuals differed significantly more in their Absorption scores than in their Porosity (Dulin) scores or Martha Story scores. In China, individuals differed significantly more in their Absorption scores than in their Martha Story scores, but variance was equal across the Absorption and Porosity scores. In Ghana, we actually saw the reverse pattern to what we’d expect: Individuals differed significantly less in their Absorption scores than in their Martha Story scores (and the differences between Absorption and Porosity (Dulin) also went in the same directly, although it was not significant).

My take-away here is that there is no strong evidence from these analyses of homogeneity of variance that individuals (within a site) varied more in absorption than in porosity.

Do site differences account for more of the variance in porosity than in absorption?

The second way I thought of to approach this question is to look at the amount of variance explained by site differences for in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that site differences would explain more of the variance in porosity than in absorption (no rescaling necessary here).

Numerically speaking, this appears to be true: In a set of linear models, site differences explain only 9% of the variance in Absorption scores, vs. 41% of the variance in Porosity (Dulin) scores and 22% of the variance in Martha Story scores.

Here, I’ll try to compare these statistically (using scores for each scale that have been standardized, collapsing across sites):

parameter b standard error df t p significant
(Intercept) 0.02 0.03 500 0.62 0.537
p7_ctrynonUS_US 0.07 0.01 500 4.79 <0.001 *
p7_ctryGHVT_THCH 0.41 0.03 500 12.63 <0.001 *
p7_ctryGH_VT -0.12 0.05 500 -2.45 0.015 *
p7_ctryTH_CH 0.00 0.05 500 -0.01 0.991
scalepmm_abs 0.00 0.01 1000 0.10 0.919
scalepor_mm 0.00 0.02 1000 0.22 0.823
p7_ctrynonUS_US:scalepmm_abs 0.02 0.01 1000 3.69 <0.001 *
p7_ctryGHVT_THCH:scalepmm_abs 0.15 0.01 1000 10.71 <0.001 *
p7_ctryGH_VT:scalepmm_abs 0.01 0.02 1000 0.72 0.473
p7_ctryTH_CH:scalepmm_abs -0.21 0.02 1000 -10.38 <0.001 *
p7_ctrynonUS_US:scalepor_mm -0.01 0.01 1000 -1.03 0.305
p7_ctryGHVT_THCH:scalepor_mm 0.11 0.02 1000 4.35 <0.001 *
p7_ctryGH_VT:scalepor_mm -0.08 0.04 1000 -2.32 0.021 *
p7_ctryTH_CH:scalepor_mm -0.01 0.03 1000 -0.43 0.667

This analysis appears to be consistent: I think that the interactions that I have bolded in the table above suggest that the differences across sites (here, coded as differences between (a) non-US and US sites, (b) Ghana and Vanuatu vs. Thailand and China, (c) Ghana vs. Vanuatu, and (d) Thailand vs. China) were generally exaggerated in the two porosity scales compared to the Absorption scale, and these seems to be true from the following plot:

My take-away here is that there is pretty strong evidence from these resression analyses that site differences accounted for more of the variance in porosity than in absorption.

Religiosity

Collapsing across sites

Do the relationships between absorption and porosity, on the one hand, and spiritual experience, on the other hand, still hold even after controlling for participants’ self-reported religiosity?

parameter b standard error df t p significant
(Intercept) 0.05 0.05 461 0.90 0.366
abs 0.10 0.05 461 1.82 0.069
por 0.18 0.06 461 3.15 0.002 *
relig_std 0.33 0.06 461 5.10 <0.001 *
scale1 0.02 0.04 461 0.51 0.608
p7_ctry1 -0.22 0.07 461 -2.98 0.003 *
p7_ctry2 0.46 0.08 461 5.78 <0.001 *
p7_ctry3 -0.16 0.08 461 -2.15 0.032 *
p7_ctry4 -0.51 0.14 461 -3.59 <0.001 *
abs:por 0.02 0.06 461 0.38 0.706
abs:relig_std 0.09 0.07 461 1.35 0.177
por:relig_std 0.16 0.06 461 2.72 0.007 *
abs:scale1 -0.04 0.04 461 -1.03 0.303
por:scale1 0.02 0.04 461 0.56 0.573
relig_std:scale1 0.00 0.05 461 0.05 0.963
abs:p7_ctry1 -0.01 0.07 461 -0.15 0.88
abs:p7_ctry2 0.10 0.09 461 1.21 0.226
abs:p7_ctry3 0.13 0.08 461 1.69 0.093
abs:p7_ctry4 0.09 0.13 461 0.65 0.515
por:p7_ctry1 0.10 0.08 461 1.26 0.209
por:p7_ctry2 -0.06 0.09 461 -0.64 0.521
por:p7_ctry3 -0.03 0.10 461 -0.29 0.775
por:p7_ctry4 0.15 0.16 461 0.95 0.344
relig_std:p7_ctry1 0.22 0.08 461 2.68 0.008 *
relig_std:p7_ctry2 -0.01 0.09 461 -0.15 0.882
relig_std:p7_ctry3 0.11 0.11 461 0.93 0.354
relig_std:p7_ctry4 -0.05 0.14 461 -0.34 0.737
scale1:p7_ctry1 -0.08 0.05 461 -1.44 0.151
scale1:p7_ctry2 0.12 0.06 461 2.12 0.034 *
scale1:p7_ctry3 0.09 0.05 461 1.59 0.113
scale1:p7_ctry4 -0.13 0.10 461 -1.23 0.219
abs:por:relig_std -0.03 0.06 461 -0.49 0.626
abs:por:scale1 -0.03 0.04 461 -0.79 0.429
abs:relig_std:scale1 -0.01 0.05 461 -0.12 0.903
por:relig_std:scale1 -0.09 0.04 461 -1.96 0.05
abs:por:p7_ctry1 -0.17 0.08 461 -2.25 0.025 *
abs:por:p7_ctry2 -0.17 0.10 461 -1.82 0.07
abs:por:p7_ctry3 -0.07 0.09 461 -0.75 0.455
abs:por:p7_ctry4 0.19 0.15 461 1.24 0.215
abs:relig_std:p7_ctry1 -0.11 0.08 461 -1.33 0.185
abs:relig_std:p7_ctry2 -0.15 0.10 461 -1.44 0.151
abs:relig_std:p7_ctry3 -0.05 0.13 461 -0.41 0.684
abs:relig_std:p7_ctry4 0.03 0.13 461 0.22 0.825
por:relig_std:p7_ctry1 0.03 0.07 461 0.42 0.673
por:relig_std:p7_ctry2 -0.07 0.09 461 -0.78 0.434
por:relig_std:p7_ctry3 0.06 0.13 461 0.46 0.644
por:relig_std:p7_ctry4 -0.05 0.12 461 -0.37 0.712
abs:scale1:p7_ctry1 -0.04 0.05 461 -0.80 0.424
abs:scale1:p7_ctry2 -0.08 0.06 461 -1.23 0.219
abs:scale1:p7_ctry3 0.01 0.05 461 0.22 0.826
abs:scale1:p7_ctry4 0.01 0.10 461 0.11 0.913
por:scale1:p7_ctry1 -0.10 0.06 461 -1.73 0.084
por:scale1:p7_ctry2 -0.08 0.06 461 -1.22 0.224
por:scale1:p7_ctry3 -0.02 0.07 461 -0.34 0.733
por:scale1:p7_ctry4 0.07 0.11 461 0.59 0.556
relig_std:scale1:p7_ctry1 0.01 0.06 461 0.18 0.86
relig_std:scale1:p7_ctry2 -0.02 0.07 461 -0.32 0.747
relig_std:scale1:p7_ctry3 -0.03 0.08 461 -0.33 0.742
relig_std:scale1:p7_ctry4 -0.03 0.10 461 -0.36 0.72
abs:por:relig_std:scale1 0.02 0.04 461 0.35 0.727
abs:por:relig_std:p7_ctry1 -0.05 0.07 461 -0.67 0.504
abs:por:relig_std:p7_ctry2 0.08 0.09 461 0.83 0.405
abs:por:relig_std:p7_ctry3 0.06 0.14 461 0.42 0.672
abs:por:relig_std:p7_ctry4 0.18 0.11 461 1.56 0.12
abs:por:scale1:p7_ctry1 0.12 0.05 461 2.19 0.029 *
abs:por:scale1:p7_ctry2 0.06 0.07 461 0.92 0.359
abs:por:scale1:p7_ctry3 -0.03 0.07 461 -0.44 0.658
abs:por:scale1:p7_ctry4 0.02 0.11 461 0.19 0.848
abs:relig_std:scale1:p7_ctry1 -0.04 0.06 461 -0.67 0.501
abs:relig_std:scale1:p7_ctry2 0.12 0.07 461 1.65 0.099
abs:relig_std:scale1:p7_ctry3 -0.09 0.09 461 -1.04 0.301
abs:relig_std:scale1:p7_ctry4 0.04 0.10 461 0.40 0.691
por:relig_std:scale1:p7_ctry1 0.01 0.05 461 0.20 0.845
por:relig_std:scale1:p7_ctry2 -0.01 0.06 461 -0.23 0.82
por:relig_std:scale1:p7_ctry3 -0.03 0.10 461 -0.29 0.772
por:relig_std:scale1:p7_ctry4 0.06 0.09 461 0.71 0.478
abs:por:relig_std:scale1:p7_ctry1 0.05 0.05 461 1.00 0.318
abs:por:relig_std:scale1:p7_ctry2 -0.02 0.07 461 -0.24 0.809
abs:por:relig_std:scale1:p7_ctry3 -0.23 0.10 461 -2.35 0.019 *
abs:por:relig_std:scale1:p7_ctry4 0.01 0.08 461 0.17 0.861
parameter b standard error df t p significant
(Intercept) 0.04 0.04 461 1.12 0.264
abs 0.19 0.04 461 4.48 <0.001 *
mm 0.14 0.05 461 2.95 0.003 *
relig_std 0.36 0.05 461 7.38 <0.001 *
scale1 0.04 0.03 461 1.49 0.138
p7_ctry1 -0.18 0.06 461 -2.87 0.004 *
p7_ctry2 0.51 0.07 461 7.01 <0.001 *
p7_ctry3 -0.18 0.06 461 -3.00 0.003 *
p7_ctry4 -0.60 0.10 461 -6.29 <0.001 *
abs:mm -0.09 0.05 461 -1.58 0.114
abs:relig_std 0.02 0.05 461 0.44 0.664
mm:relig_std 0.09 0.05 461 1.93 0.054
abs:scale1 -0.06 0.03 461 -1.95 0.052
mm:scale1 -0.04 0.03 461 -1.19 0.233
relig_std:scale1 0.00 0.03 461 0.06 0.95
abs:p7_ctry1 -0.15 0.06 461 -2.50 0.013 *
abs:p7_ctry2 0.05 0.08 461 0.61 0.544
abs:p7_ctry3 0.06 0.07 461 0.93 0.352
abs:p7_ctry4 0.06 0.10 461 0.62 0.536
mm:p7_ctry1 0.12 0.07 461 1.76 0.08
mm:p7_ctry2 -0.06 0.07 461 -0.83 0.406
mm:p7_ctry3 -0.05 0.08 461 -0.62 0.537
mm:p7_ctry4 0.19 0.14 461 1.36 0.175
relig_std:p7_ctry1 0.12 0.07 461 1.89 0.059
relig_std:p7_ctry2 -0.02 0.08 461 -0.20 0.839
relig_std:p7_ctry3 0.09 0.11 461 0.82 0.41
relig_std:p7_ctry4 -0.07 0.09 461 -0.75 0.457
scale1:p7_ctry1 -0.10 0.04 461 -2.19 0.029 *
scale1:p7_ctry2 0.12 0.05 461 2.27 0.024 *
scale1:p7_ctry3 0.06 0.04 461 1.40 0.162
scale1:p7_ctry4 -0.19 0.07 461 -2.79 0.005 *
abs:mm:relig_std 0.09 0.05 461 1.69 0.092
abs:mm:scale1 -0.04 0.04 461 -1.04 0.298
abs:relig_std:scale1 0.03 0.04 461 0.77 0.44
mm:relig_std:scale1 -0.07 0.03 461 -1.96 0.05
abs:mm:p7_ctry1 0.06 0.07 461 0.94 0.349
abs:mm:p7_ctry2 -0.11 0.08 461 -1.35 0.177
abs:mm:p7_ctry3 0.08 0.08 461 1.02 0.31
abs:mm:p7_ctry4 0.17 0.16 461 1.09 0.276
abs:relig_std:p7_ctry1 -0.02 0.07 461 -0.24 0.811
abs:relig_std:p7_ctry2 -0.10 0.09 461 -1.05 0.295
abs:relig_std:p7_ctry3 0.07 0.13 461 0.58 0.56
abs:relig_std:p7_ctry4 0.10 0.11 461 0.95 0.341
mm:relig_std:p7_ctry1 0.02 0.06 461 0.26 0.794
mm:relig_std:p7_ctry2 -0.03 0.07 461 -0.39 0.693
mm:relig_std:p7_ctry3 -0.03 0.10 461 -0.35 0.723
mm:relig_std:p7_ctry4 0.07 0.10 461 0.69 0.488
abs:scale1:p7_ctry1 0.00 0.04 461 -0.02 0.987
abs:scale1:p7_ctry2 -0.04 0.06 461 -0.68 0.494
abs:scale1:p7_ctry3 0.05 0.05 461 1.06 0.292
abs:scale1:p7_ctry4 0.04 0.07 461 0.57 0.569
mm:scale1:p7_ctry1 -0.10 0.05 461 -2.22 0.027 *
mm:scale1:p7_ctry2 -0.02 0.05 461 -0.47 0.64
mm:scale1:p7_ctry3 0.02 0.06 461 0.34 0.737
mm:scale1:p7_ctry4 0.05 0.10 461 0.53 0.596
relig_std:scale1:p7_ctry1 0.05 0.05 461 1.08 0.28
relig_std:scale1:p7_ctry2 -0.05 0.06 461 -0.81 0.417
relig_std:scale1:p7_ctry3 0.01 0.08 461 0.08 0.934
relig_std:scale1:p7_ctry4 0.01 0.06 461 0.12 0.905
abs:mm:relig_std:scale1 0.02 0.04 461 0.54 0.589
abs:mm:relig_std:p7_ctry1 -0.06 0.06 461 -0.90 0.37
abs:mm:relig_std:p7_ctry2 -0.01 0.08 461 -0.12 0.905
abs:mm:relig_std:p7_ctry3 -0.06 0.11 461 -0.55 0.58
abs:mm:relig_std:p7_ctry4 -0.03 0.12 461 -0.25 0.803
abs:mm:scale1:p7_ctry1 0.02 0.05 461 0.34 0.736
abs:mm:scale1:p7_ctry2 0.03 0.06 461 0.59 0.553
abs:mm:scale1:p7_ctry3 0.00 0.06 461 -0.04 0.967
abs:mm:scale1:p7_ctry4 -0.02 0.11 461 -0.19 0.848
abs:relig_std:scale1:p7_ctry1 -0.03 0.05 461 -0.72 0.472
abs:relig_std:scale1:p7_ctry2 0.07 0.06 461 1.07 0.285
abs:relig_std:scale1:p7_ctry3 -0.05 0.09 461 -0.51 0.612
abs:relig_std:scale1:p7_ctry4 -0.04 0.07 461 -0.51 0.61
mm:relig_std:scale1:p7_ctry1 0.00 0.04 461 0.03 0.979
mm:relig_std:scale1:p7_ctry2 -0.05 0.05 461 -0.95 0.345
mm:relig_std:scale1:p7_ctry3 -0.02 0.07 461 -0.30 0.765
mm:relig_std:scale1:p7_ctry4 0.04 0.07 461 0.54 0.589
abs:mm:relig_std:scale1:p7_ctry1 0.02 0.04 461 0.51 0.608
abs:mm:relig_std:scale1:p7_ctry2 0.03 0.06 461 0.53 0.594
abs:mm:relig_std:scale1:p7_ctry3 -0.11 0.08 461 -1.45 0.148
abs:mm:relig_std:scale1:p7_ctry4 -0.05 0.08 461 -0.64 0.522

Following other analysis, I examined this separately using Porosity (Dulin) and Martha Story as indices of porosity. In both cases, religiosity was a significant positive predictor of spiritual experience (as we’d expect). But, importantly, the main effects of porosity remained significantly positive in both analyses, even after controlling for participants’ self-reported religiosity (see bolded rows in tables above). The main effect of absorption remained significantly positive when porosity was indexed by the Martha Story (second table), but not when porosity was indexed by the Porosity (Dulin) scale (although some would consider this effect to be “marginally significant”).

My take-away here is that religiosity does not fully “explain away” the observed relationships between absorption and porosity, on the one hand, and spiritual experience, on the other.

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

parameter b standard error df t p significant
US
(Intercept) 0.04 0.07 93 0.50 0.617
abs 0.16 0.07 93 2.19 0.031 *
por 0.28 0.08 93 3.36 0.001 *
relig_std 0.49 0.07 93 7.12 <0.001 *
scale1 0.04 0.04 93 0.92 0.361
abs:por -0.17 0.08 93 -2.01 0.047 *
abs:relig_std 0.01 0.07 93 0.15 0.884
por:relig_std 0.19 0.06 93 3.10 0.003 *
abs:scale1 -0.13 0.05 93 -2.80 0.006 *
por:scale1 -0.08 0.05 93 -1.55 0.125
relig_std:scale1 0.05 0.04 93 1.07 0.288
abs:por:relig_std -0.09 0.06 93 -1.41 0.161
abs:por:scale1 0.10 0.05 93 1.89 0.061
abs:relig_std:scale1 -0.08 0.04 93 -1.85 0.067
por:relig_std:scale1 -0.07 0.04 93 -1.96 0.053
abs:por:relig_std:scale1 0.08 0.04 93 1.98 0.051
Ghana
(Intercept) -0.28 0.11 91 -2.51 0.014 *
abs 0.09 0.11 91 0.85 0.398
por 0.12 0.10 91 1.17 0.244
relig_std 0.44 0.12 91 3.73 <0.001 *
scale1 0.01 0.09 91 0.10 0.917
abs:por -0.14 0.10 91 -1.33 0.188
abs:relig_std 0.01 0.11 91 0.04 0.965
por:relig_std 0.08 0.09 91 0.83 0.408
abs:scale1 -0.07 0.08 91 -0.87 0.386
por:scale1 -0.02 0.08 91 -0.28 0.782
relig_std:scale1 0.03 0.09 91 0.28 0.778
abs:por:relig_std 0.04 0.09 91 0.48 0.633
abs:por:scale1 -0.01 0.08 91 -0.12 0.906
abs:relig_std:scale1 0.12 0.09 91 1.31 0.194
por:relig_std:scale1 -0.08 0.07 91 -1.10 0.273
abs:por:relig_std:scale1 0.01 0.07 91 0.16 0.877
Thailand
(Intercept) -0.08 0.07 102 -1.12 0.266
abs 0.30 0.07 102 4.56 <0.001 *
por 0.19 0.07 102 2.59 0.011 *
relig_std 0.51 0.13 102 3.98 <0.001 *
scale1 0.03 0.05 102 0.71 0.48
abs:por -0.04 0.07 102 -0.62 0.539
abs:relig_std 0.04 0.15 102 0.24 0.811
por:relig_std 0.23 0.13 102 1.73 0.087
abs:scale1 0.00 0.05 102 -0.04 0.968
por:scale1 0.04 0.05 102 0.70 0.487
relig_std:scale1 0.05 0.09 102 0.56 0.577
abs:por:relig_std 0.02 0.12 102 0.18 0.861
abs:por:scale1 -0.06 0.05 102 -1.15 0.255
abs:relig_std:scale1 -0.03 0.11 102 -0.27 0.784
por:relig_std:scale1 0.00 0.09 102 -0.05 0.96
abs:por:relig_std:scale1 -0.20 0.08 102 -2.30 0.023 *
China
(Intercept) 0.27 0.12 92 2.19 0.031 *
abs 0.03 0.14 92 0.25 0.804
por 0.52 0.13 92 4.03 <0.001 *
relig_std 0.38 0.10 92 3.80 <0.001 *
scale1 -0.04 0.09 92 -0.42 0.672
abs:por 0.23 0.12 92 1.87 0.065
abs:relig_std 0.00 0.10 92 0.04 0.968
por:relig_std 0.23 0.10 92 2.36 0.02 *
abs:scale1 -0.04 0.10 92 -0.38 0.707
por:scale1 0.05 0.09 92 0.61 0.541
relig_std:scale1 -0.06 0.07 92 -0.94 0.352
abs:por:relig_std 0.15 0.08 92 1.87 0.064
abs:por:scale1 -0.04 0.08 92 -0.45 0.657
abs:relig_std:scale1 0.01 0.07 92 0.18 0.855
por:relig_std:scale1 -0.04 0.07 92 -0.64 0.527
abs:por:relig_std:scale1 0.01 0.06 92 0.25 0.807
Vanuatu
(Intercept) -0.22 0.12 83 -1.88 0.063
abs 0.01 0.14 83 0.04 0.972
por 0.08 0.12 83 0.66 0.514
relig_std 0.38 0.15 83 2.50 0.014 *
scale1 -0.04 0.08 83 -0.45 0.652
abs:por 0.18 0.14 83 1.30 0.199
abs:relig_std 0.15 0.17 83 0.89 0.377
por:relig_std 0.07 0.15 83 0.49 0.626
abs:scale1 -0.21 0.10 83 -2.03 0.046 *
por:scale1 0.09 0.09 83 1.07 0.287
relig_std:scale1 0.07 0.11 83 0.67 0.503
abs:por:relig_std -0.22 0.18 83 -1.24 0.218
abs:por:scale1 -0.14 0.10 83 -1.44 0.154
abs:relig_std:scale1 0.25 0.12 83 2.07 0.041 *
por:relig_std:scale1 -0.04 0.11 83 -0.34 0.737
abs:por:relig_std:scale1 0.13 0.13 83 1.00 0.32

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.06 0.07 93 0.78 0.44
abs 0.06 0.07 93 0.90 0.371
mm 0.28 0.07 93 3.92 <0.001 *
relig_std 0.44 0.06 93 7.20 <0.001 *
scale1 0.07 0.04 93 1.67 0.098
abs:mm -0.03 0.07 93 -0.47 0.641
abs:relig_std -0.01 0.06 93 -0.13 0.898
mm:relig_std 0.11 0.06 93 2.01 0.047 *
abs:scale1 -0.06 0.04 93 -1.43 0.155
mm:scale1 -0.15 0.04 93 -3.63 <0.001 *
relig_std:scale1 0.08 0.04 93 2.39 0.019 *
abs:mm:relig_std 0.05 0.06 93 0.71 0.48
abs:mm:scale1 -0.03 0.04 93 -0.79 0.432
abs:relig_std:scale1 -0.03 0.03 93 -0.77 0.446
mm:relig_std:scale1 -0.07 0.03 93 -2.22 0.029 *
abs:mm:relig_std:scale1 0.06 0.04 93 1.54 0.126
Ghana
(Intercept) -0.25 0.11 91 -2.40 0.018 *
abs 0.11 0.10 91 1.08 0.285
mm 0.09 0.09 91 0.96 0.339
relig_std 0.43 0.11 91 3.94 <0.001 *
scale1 0.03 0.08 91 0.37 0.713
abs:mm -0.22 0.10 91 -2.30 0.024 *
abs:relig_std 0.01 0.11 91 0.07 0.945
mm:relig_std 0.04 0.09 91 0.50 0.62
abs:scale1 -0.07 0.08 91 -0.94 0.349
mm:scale1 -0.05 0.07 91 -0.76 0.448
relig_std:scale1 -0.01 0.08 91 -0.11 0.916
abs:mm:relig_std 0.11 0.09 91 1.18 0.242
abs:mm:scale1 -0.07 0.07 91 -0.89 0.376
abs:relig_std:scale1 0.13 0.08 91 1.62 0.109
mm:relig_std:scale1 -0.12 0.07 91 -1.79 0.076
abs:mm:relig_std:scale1 0.08 0.07 91 1.18 0.241
Thailand
(Intercept) -0.06 0.07 102 -0.87 0.387
abs 0.31 0.07 102 4.37 <0.001 *
mm 0.12 0.08 102 1.64 0.104
relig_std 0.59 0.13 102 4.50 <0.001 *
scale1 0.03 0.05 102 0.58 0.56
abs:mm 0.00 0.08 102 -0.05 0.961
abs:relig_std 0.12 0.17 102 0.70 0.488
mm:relig_std 0.06 0.13 102 0.42 0.675
abs:scale1 0.00 0.05 102 0.08 0.939
mm:scale1 0.00 0.05 102 0.01 0.993
relig_std:scale1 0.05 0.09 102 0.52 0.604
abs:mm:relig_std 0.03 0.12 102 0.27 0.788
abs:mm:scale1 -0.05 0.05 102 -0.89 0.377
abs:relig_std:scale1 0.00 0.11 102 -0.01 0.996
mm:relig_std:scale1 -0.06 0.09 102 -0.62 0.54
abs:mm:relig_std:scale1 -0.10 0.08 102 -1.23 0.221
China
(Intercept) 0.38 0.13 92 2.86 0.005 *
abs 0.33 0.14 92 2.27 0.026 *
mm 0.45 0.12 92 3.84 <0.001 *
relig_std 0.45 0.10 92 4.50 <0.001 *
scale1 0.03 0.09 92 0.31 0.756
abs:mm 0.09 0.13 92 0.73 0.465
abs:relig_std 0.15 0.10 92 1.40 0.164
mm:relig_std 0.24 0.09 92 2.60 0.011 *
abs:scale1 -0.01 0.09 92 -0.10 0.918
mm:scale1 -0.06 0.08 92 -0.83 0.409
relig_std:scale1 0.00 0.07 92 0.04 0.968
abs:mm:relig_std 0.07 0.09 92 0.71 0.482
abs:mm:scale1 -0.07 0.08 92 -0.86 0.391
abs:relig_std:scale1 0.00 0.07 92 -0.02 0.981
mm:relig_std:scale1 -0.07 0.06 92 -1.27 0.209
abs:mm:relig_std:scale1 -0.04 0.06 92 -0.68 0.498
Vanuatu
(Intercept) -0.27 0.12 83 -2.32 0.023 *
abs -0.06 0.15 83 -0.39 0.698
mm -0.15 0.13 83 -1.13 0.263
relig_std 0.43 0.15 83 2.93 0.004 *
scale1 -0.06 0.09 83 -0.67 0.503
abs:mm -0.32 0.16 83 -2.00 0.049 *
abs:relig_std 0.19 0.17 83 1.12 0.264
mm:relig_std 0.15 0.14 83 1.02 0.312
abs:scale1 -0.22 0.11 83 -2.03 0.045 *
mm:scale1 -0.03 0.10 83 -0.28 0.783
relig_std:scale1 0.08 0.11 83 0.71 0.479
abs:mm:relig_std 0.28 0.19 83 1.52 0.132
abs:mm:scale1 -0.12 0.12 83 -1.01 0.314
abs:relig_std:scale1 0.25 0.13 83 1.99 0.05
mm:relig_std:scale1 0.02 0.11 83 0.21 0.836
abs:mm:relig_std:scale1 0.18 0.14 83 1.33 0.189

I see two general patterns here:

  1. In the US, Thai, and Chinese samples, absorption, porosity, and religiosity all remain significant predictors of spiritual experience when controlling for each other in one of the two analyses reported above. In the other analysis, there is some evidence for “swamping out”: In the US and Chinese samples, the effect of absorption becomes non-significant in the other analysis; and in Thailand, the effect of porosity becomes non-significant in the other analysis. Generally speaking, though, I’d say this is moderate evidence that religiosity does not fully “explain away” the effects of absorption and porosity in these three sites (the US, Thailand, and China).
  2. In Ghana and Vanuatu, only religiosity remains a significant predictor of spiritual experience in these analyses. This could be interpreted as evidence that religiosity does “explain away” the effects of absorption and porosity in these two (devoutly Christian) sites (Ghana and Vanuatu).

To help with our interpretation, here are the correlations with religiosity, this time looking at scores standardized within each site:

Joining, by = c("p7_ctry", "scale")

Which experiences are predicted by absorption vs. porosity?

Collapsing across sites

Here are the top ten most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Correlation Question text Scale
Absorption
0.356 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.326 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.294 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.288 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.264 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.259 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.258 4. I can hear music when it is not being played. [music] Unusual Events
0.245 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.244 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
0.230 19. Have you ever had the experience of being awake but unable to move? [awake paralysis] Spiritual Events
Porosity (Dulin)
0.623 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.623 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.606 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.575 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.566 8. I ask for God's help in the midst of daily activities. [God help] Daily Spiritual Experiences
0.560 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences
0.548 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.538 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.515 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.500 5. I find comfort in my religion or spirituality. [spiritual comfort] Daily Spiritual Experiences
Martha Story
0.470 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.465 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.451 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.448 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.443 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.427 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
0.414 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.413 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.411 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.404 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Considering each site individually

Here are the top three most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Site Correlation Question text Scale
Absorption
US 0.515 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.491 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.380 3) [psychic]. I am completely convinced that I am psychic. Extrasensory
Ghana 0.333 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.262 14. I feel a selfless caring for others. [selfless care] Daily Spiritual Experiences
0.246 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
Thailand 0.403 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.377 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.345 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
China 0.366 15. Have you ever had a feeling of overwhelming emotion during prayer? [emotional prayer] Spiritual Events
0.357 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.352 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
Vanuatu 0.397 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.313 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.253 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
Porosity (Dulin)
US 0.580 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.579 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.554 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
Ghana 0.353 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.340 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
0.314 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
Thailand 0.479 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
0.413 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.378 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
China 0.577 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.569 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.558 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
Vanuatu 0.444 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.367 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.310 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences
Martha Story
US 0.610 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.599 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.539 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
Ghana 0.321 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.297 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
0.288 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
Thailand 0.385 8. Have you ever felt that you tasted God or a spirit? [taste] Spiritual Events
0.330 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.322 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
China 0.417 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.404 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.389 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
Vanuatu 0.345 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.256 15. I accept others even when they do things I think are wrong. [accept wrong] Daily Spiritual Experiences
0.255 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Porosity: good vs. bad emotions

Removed 3 rows containing missing values (geom_point).

Overall scores

Histograms for each scale

Absorption

Daily spiritual experiences

Spiritual events

Ways of being

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Uncommon events

Extrasensory

Hard thinking

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Porosity

Martha story

Demographics

[1] "Participants who passed all attention checks"
[1] "All participants"
[1] "Participants who passed all attention checks"
[1] "All participants"

Important to note that a very substantial majority of participants in Thailand were female, and a slight majority of participants in Vanuatu were female.

[1] "Participants who passed all attention checks"
[1] "All participants"
LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNC0xNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF94bHN4KCIuL2RhdGEgZnJvbSBOaWtraS9QYWNrZXQgN19DT0RFRF9NYXJjaCAxOCwgMjAxOS54bHN4IiwKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSBkX3Jhd1sxLF0gJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInF1ZXN0aW9uIikgJT4lCiAgcmVuYW1lKHF1ZXN0aW9uX3RleHQgPSAiLiIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMOuIiwgIiAtICIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuiIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO5IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxuIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxyIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pLAogICAgICAgICBzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBxdWVzdGlvbiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gaWZlbHNlKHNjYWxlICVpbiUgYygiZW50ciIsICIyZGF5IiwgInZlciIsICJiYXRjIiwgInJlc2FtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5IiwgInN1YmoiLCAiZmlsZSIsICJyZWNyIiwgIndoZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aG9jIiksICJkYXRhX2VudHJ5Iiwgc2NhbGUpKSAlPiUKICBzZWxlY3Qob3JkZXIsIHNjYWxlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgYXJyYW5nZShvcmRlcikKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgZHVwbGljYXRlcwpkdXBsaWNhdGVzIDwtIGRfcmF3ICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCA8LSBmdWxsX2pvaW4oZF9yYXcgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFwN19zdWJqICVpbiUgZHVwbGljYXRlcyRwN19zdWJqKSksCiAgICAgICAgICAgICAgICAgZF9yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X3N1YmogJWluJSBkdXBsaWNhdGVzJHA3X3N1YmogJiBwN19iYXRjID09IDEpKQoKIyBlbGltaW5hdGUgZmlyc3Qgc2FtcGxlIGZyb20gZ2hhbmEgKHBvb3JseSBjb2xsZWN0ZWQpCmQwMCA8LSBkMDAgJT4lCiAgZmlsdGVyKCEocDdfcmVzYW1wbGUgPT0gIjEiICYgcDdfY3RyeSA9PSAiNCIpKQoKZDAwICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7cn0KZDAgPC0gZDAwWy0xLF0gJT4lICMgZ2V0IHJpZCBvZiBxdWVzdGlvbiB0ZXh0CiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInA3X2Fic18iKSwgc3RhcnRzX3dpdGgoInA3X2RzZV8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfc2VfIiksIHN0YXJ0c193aXRoKCJwN193b2JfIiksCiAgICAgICAgICAgICAgICAgc3RhcnRzX3dpdGgoInA3X3VuZXZfIiksIHN0YXJ0c193aXRoKCJwN19leHNlbl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfaHRoa18iKSwgc3RhcnRzX3dpdGgoInA3X3Bvcl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfbW1fIiksIHA3X2RlbV9hZ2UsIHA3X2RlbV9zZXMsCiAgICAgICAgICAgICAgICAgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpLCAKICAgICAgICAgICAgZnVucyhhcy5udW1lcmljKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZGVtX2hvbHkudHVuZy5naWYpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5vIiwgIjEiID0gInllcyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfYWJzX2NoZWNrLCBwN19kc2VfY2hlY2ssIHA3X3NlX2NoZWNrLCBwN191bmV2X2NoZWNrLCAKICAgICAgICAgICAgICAgICBwN19leHNlbl9jaGVjaywgcDdfcG9yX2NoZWNrLCBwN19tbV9jaGVjayksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAicGFzcyIsICIxIiA9ICJmYWlsIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19hYnNfY2hpbGQuZXhwOnA3X2Fic19zdW5zZXQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlKC4sICIwIiA9IEYsICIxIiA9IFQpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZHNlX2dvZC5wcmVzY246cDdfZHNlX2FjY2VwdC53cm9uZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSBpbiBhIHdoaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWUgZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtb3N0IGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIm1hbnkgdGltZXMgYSBkYXkiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3NlX3ZvaWNlLm91dDpwN19zZV9vd24uaGVhbGluZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJzZXZlcmFsIHRpbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gImZhaXJseSBvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2Jfc2V0Lm1pbmRfcmV2ZXJzZTpwN193b2JfZnV0dXJlLm9uLm1lX3JldmVyc2UpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zIiA9ICJzdHJvbmdseSBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV3aGF0IGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2JfbGl0dGxlLmNoYW5nZTpwN193b2JfcHVzaGVkLmFyb3VuZCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAic3Ryb25nbHkgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0yIiA9ICJzb21ld2hhdCBhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMyIgPSAic3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3VuZXZfdm9pY2UuYWxvdWQ6cDdfdW5ldl9zaGFkb3dzKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJuZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJzb21ldGltZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiYWxtb3N0IGFsd2F5cyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZXhzZW5fZXNwLmV4aXN0czpwN19leHNlbl9zZW5kLm1zZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaGFzIG5vdCBoYWQgdGhlIGV4cGVyaWVuY2UgKG5vKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJoYXMgaGFkIHRoZSBleHBlcmllbmNlICh5ZXMpIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19odGhrX2NvbXBsZXg6cDdfaHRoa19yZXNwb25zYmx0LCBwN19odGhrX2xvbmcuaHJzLAogICAgICAgICAgICAgICAgIHA3X2h0aGtfd2F5LnRvLnRvcDpwN19odGhrX25ldy5zb2x0aW9ucywKICAgICAgICAgICAgICAgICBwN19odGhrX3B1enpsZXM6cDdfaHRoa19pbnRlbC50YXNrLCBwN19odGhrX25vdC5wZXJzb25hbCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBub3QgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbGlrZSBtZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfaHRoa19ub3QuZnVuOnA3X2h0aGtfYXZvaWQudGhpbmssIAogICAgICAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bzpwN19odGhrX2xpbC50aG91Z2h0LCBwN19odGhrX25vdC5leGNpdGluZywKICAgICAgICAgICAgICAgICBwN19odGhrX21lbnRhbC5lZmZydDpwN19odGhrX2pvYi5kb25lKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gInNvbWV3aGF0IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBsaWtlIG1lIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19wb3JfdGhncy5ocnQsIHA3X3Bvcl93aWZpLnRoZ3M6cDdfcG9yX2FuZ3IuY250cmwsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3NwcnQuZW52eTpwN19wb3JfcmVhZC50aGdzLCBwN19wb3Jfc3RyZS5zcG9pbCwKICAgICAgICAgICAgICAgICBwN19wb3JfY29uc2x0LnVuc2VlbjpwN19wb3Jfc3Brbi5jdXJzZSwKICAgICAgICAgICAgICAgICBwN19wb3JfY3Vyc2Uuc2ljazpwN19wb3JfZmFsbC5pbi5sb3YsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3RoZ3MuaGVhbDpwN19wb3JfdmlzdWFsaXphdGlvbiksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaXQgZG9lcyBub3QgaGFwcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIml0IG1pZ2h0IGhhcHBlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3Bvcl90aGdzLmh1cnRfYTpwN19wb3JfdGhncy5odXJ0X2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX2FuZ3IuY250cmxfYTpwN19wb3JfYW5nci5jbnRybF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9yZWFkLnRoZ3NfYTpwN19wb3JfcmVhZC50aGdzX2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3N0cmUuc3BvaWxfYTpwN19wb3Jfc3RyZS5zcG9pbF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9zcGtuLmN1cnNlX2E6cDdfcG9yX3Nwa24uY3Vyc2VfYywKICAgICAgICAgICAgICAgICBwN19wb3JfZmFsbC5pbi5sb3ZfYTpwN19wb3JfZmFsbC5pbi5sb3ZfYyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiYSBsb3QiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X21tX2FuZ19mZWVsLmh1cnQ6cDdfbW1fc3BydC50aGdzLmh1cnQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5ldmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGUocDdfY3RyeSA9IHJlY29kZV9mYWN0b3IocDdfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIlZhbnVhdHUiKSwKICAgICAgICAgcDdfc3ViaiA9IGZhY3RvcihwN19zdWJqKSwKICAgICAgICAgcDdfZGVtX3NleCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJmZW1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIm90aGVyIiksCiAgICAgICAgIHA3X2RlbV9ydXIudXJiID0gcmVjb2RlX2ZhY3RvcihwN19kZW1fcnVyLnVyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJydXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAidXJiYW4iKSwKICAgICAgICAgcDdfZGVtX2FmZnJkLmJhc2ljcyA9IHJlY29kZV9mYWN0b3IocDdfZGVtX2FmZnJkLmJhc2ljcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gInllcyIpLAogICAgICAgICBwN19kZW1fc2VzX2NhdCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAibXVjaCBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICJhIGxpdHRsZSBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gImFib3V0IHRoZSBzYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJhIGxpdHRsZSByaWNoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIm11Y2ggcmljaGVyIikpICU+JQogIHNlbGVjdCgtYyhwN19lbnRyOnA3X3Jlc2FtcGxlLCBwN19maWxlOnA3X3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgY291bnQgYW55b25lIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVja3MKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCiMgZF9mYWlsIDwtIGQwICU+JQojICAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAiZmFpbCIgfCBwN19kc2VfY2hlY2sgPT0gImZhaWwiIHwgCiMgICAgICAgICAgICBwN19zZV9jaGVjayA9PSAiZmFpbCIgfCBwN191bmV2X2NoZWNrID09ICJmYWlsIiB8IAojICAgICAgICAgICAgcDdfZXhzZW5fY2hlY2sgPT0gImZhaWwiIHwgcDdfcG9yX2NoZWNrID09ICJmYWlsIiB8CiMgICAgICAgICAgICBwN19tbV9jaGVjayA9PSAiZmFpbCIpCiMgZF9mYWlsICU+JSBjb3VudChwN19jdHJ5KQoKZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiY2hlY2siKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBhdHRlbnRpb25fY2hlY2ssIGNvbnRhaW5zKCJjaGVjayIpKSAlPiUKICBjb3VudChwN19jdHJ5LCBzY2FsZSwgYXR0ZW50aW9uX2NoZWNrKSAlPiUKICBzcHJlYWQoYXR0ZW50aW9uX2NoZWNrLCBuKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKQoKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCmQgPC0gZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayAhPSAiZmFpbCIsIHA3X2RzZV9jaGVjayAhPSAiZmFpbCIsIHA3X3NlX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfdW5ldl9jaGVjayAhPSAiZmFpbCIsIHA3X2V4c2VuX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfcG9yX2NoZWNrICE9ICJmYWlsIiwgcDdfbW1fY2hlY2sgIT0gImZhaWwiKQpgYGAKCmBgYHtyfQojICMgY2hlY2sgY291bnRyeSBjb2RlcwojIGQgJT4lIAojICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiMgICBtdXRhdGUocDdfc3Vial9maXJzdGRpZyA9IHN1YnN0cihwN19zdWJqLCAxLCAxKSkgJT4lCiMgICBjb3VudChwN19jdHJ5LCBwN19zdWJqX2ZpcnN0ZGlnKQpgYGAKCgojIENvbmZpcm1hdG9yeSBoeXBvdGhlc2VzIChhcyBzcGVjaWZpZWQgaW4gcHJlcmVnaXN0cmF0aW9uKQoKX05PVEU6IEkgaW5jbHVkZWQgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzLCBzaW5jZSB3ZSBkaWQgbm90IHNwZWNpZnkgdGhhdCB3ZSB3b3VsZCBleGNsdWRlIHBhcnRpY2lwYW50cyBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCB0cnkgcnVubmluZyBldmVyeXRoaW5nIG9uIHRoZSBzdWJzZXQgb2YgcGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MganVzdCBzbyB0aGF0IHdlIGtub3csIGJ1dCB0aGlzIGRlY3JlYXNlcyBvdXIgc2FtcGxlIHNpemVzIHByZXR0eSBkcmFtYXRpY2FsbHkuXwoKX0FMU08gTk9URTogSSBpbmNsdWRlZCBvbmx5IHRoZSBzZWNvbmQgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cywgd2hvIHdlcmUgcmVjcnVpdGVkIGFjY29yZGluZyB0byBvdXIgc3RhbmRhcmRzIGFuZCBhcyBzcGVjaWZpZWQgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4gRm9yIHRoZSBtb3N0IHBhcnQsIGFsbCByZXN1bHRzIGFyZSB0aGUgc2FtZSB3aGVuIGluY2x1ZGluZyB0aGUgZnVsbCwgImRvdWJsZSIgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cy5fCgpgYGB7cn0KIyBzdGFuZGFyZGl6ZSwgY29sbGFwc2luZyBhY3Jvc3MgcGFydGljaXBhbnRzCmRfc3RkIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKYGBge3J9CiMgc3RhbmRhcmRpemUsIGNvbGxhcHNpbmcgYWNyb3NzIHBhcnRpY2lwYW50cwpkX3N0ZF9ieXNpdGUgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgY29udGFpbnMoInRvdGFsIikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUgIyBncm91cCBieSBzaXRlCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMQoKX19IeXBvdGhlc2lzICMxOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiB0aGUgVGVsbGVnZW4gQWJzb3JwdGlvbiBTY2FsZSAoVGVsbGVnZW4gJiBBdGtpbnNvbiwgMTk3NCkgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgYWJzb3JwdGlvbiBzY29yZXMgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcywgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gT3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfaDEgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gxKQojIHN1bW1hcnkocjEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDFfc3VtCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMxKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93IGluIHRhYmxlIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgxX3Bsb3RfYSA8LSBkX3N0ZF9oMSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9wbG90X2IgPC0gZF9zdGRfaDEgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfcGxvdF9hLCBoMV9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMgoKX19IeXBvdGhlc2lzICMyOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiBvdXIgdHdvIHBvcm9zaXR5IGluZGljZXMgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgcG9yb3NpdHkgc2NvcmVzIChmcm9tIGVhY2ggb2Ygb3VyIHR3byBpbmRpY2VzKSB0byBwcmVkaWN0IHJlcG9ydHMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGFjcm9zcyB0aGUgMiBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgaW5jbHVkZWQgaW4gb3VyIHN1cnZleSBwYWNrZXQsIGFsbG93aW5nIGZvciBkaWZmZXJlbmNlcyBhY3Jvc3Mgb3VyIGZpdmUgZmllbGQgc2l0ZXMgYW5kIGFjcm9zcyB0aGUgdHdvIHNjYWxlcyB3ZSB1c2VkIHRvIG1lYXN1cmUgc3Bpcml0dWFsIGV4cGVyaWVuY2UuIFVzaW5nIHRoZSDigJxsbWU04oCdIHBhY2thZ2UgZm9yIFIgKEJhdGVzLCAyMDE4KSwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2l0ZSAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KSwgd2hlcmUg4oCcc2NhbGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKGVmZmVjdC1jb2RlZCksIGFuZCDigJxzaXRl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSBmaXZlIGZpZWxkIHNpdGVzIChlZmZlY3QtY29kZWQpLiBXZSB3aWxsIHJ1biB0d28gdmVyc2lvbnMgb2YgdGhpcyBtb2RlbCwgb25lIHVzaW5nIGVhY2ggb2YgdGhlIHR3byDigJxwb3Jvc2l0eeKAnSBtZWFzdXJlcyBkZXNjcmliZWQgYWJvdmUuIEZvciBlYWNoIHJlZ3Jlc3Npb24sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgdCA+IDIsIHAgPCAwLjA1IHVzaW5nIFNhdHRlcnRod2FpdGUncyBkZWdyZWVzIG9mIGZyZWVkb20gbWV0aG9kIGFzIGltcGxlbWVudGVkIGluIHRoZSDigJxsbWVyVGVzdOKAnSBwYWNrYWdlIGZvciBSLCBLdXpuZXRzb3ZhLCBCcm9ja2hvZmYsICYgQ2hyaXN0ZW5zZW4sIDIwMTcpLiAoVGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZWQgaW4gdGhlIG1vZGVsIHdpbGwgYmUgb2YgZ3JlYXQgaW50ZXJlc3QgdG8gdXMsIGJ1dCBhcmUgZXhwbG9yYXRvcnkuKQoKSWYgd2UgaGF2ZSB0cm91YmxlIGZpdHRpbmcgdGhlc2UgbW9kZWxzIG9yIHRoZXJlIGFyZSBvdGhlciBzaWducyBvZiBtb2RlbCBmaXQgcHJvYmxlbXMsIHdlIHdpbGwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBtb2RlbDogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIHBvciwgbW0pICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMiRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMiRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjJfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyMl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgyX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwKICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc3VtCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMyKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGJvdGggcmVncmVzc2lvbiBhbmFseXNlcyAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gIm1tIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAocmFuZ2U6IDAtNTQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4KCmBgYHtyfQpoMl9wbG90X2ExIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTEsIGgyX3Bsb3RfYjEsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoMl9wbG90X2EyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzMKCl9fSHlwb3RoZXNpcyAjMzogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzFdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwW10gYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSBbLi4uXSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBGb3IgSHlwb3RoZXNpcyAjMywgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KS4gWy4uLl0gQWdhaW4sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSBhbmQgb2YgZWFjaCBwb3Jvc2l0eSBtZWFzdXJlIG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgcCA8IDAuMDUpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oMSA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjNfdXMpCmBgYAoKYGBge3J9CnIzX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHIzX2doKQpgYGAKCmBgYHtyfQpyM190aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyM190aCkKYGBgCgpgYGB7cn0KcjNfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjNfY2gpCmBgYAoKYGBge3J9CnIzX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyM19naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyM192dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMzIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIGFuZCBDaGluYeKAlGJ1dCB0aGlzIHdhcyBub3QgdGhlIGNhc2UgaW4gVmFudWF0dSAoYWx0aG91Z2ggc29tZSB3b3VsZCBjb25zaWRlciB0aGUgZWZmZWN0ICJtYXJnaW5hbGx5IHNpZ25pZmljYW50Ijsgc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMSAlPiUKICAgICAgICAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSwgCiAgICAgICBhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsgCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsgCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCihTZWUgb3RoZXIgcmVsZXZhbnQgcGxvdHMgdW5kZXIgIkh5cG90aGVzaXMgIzEsIiBhYm92ZS4pCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICM0CgpfX0h5cG90aGVzaXMgIzQ6IFRoZSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIkZvciBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzLCB3ZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUgKGNvbnNpZGVyaW5nIG9ubHkgcGFydGljaXBhbnRzIGZyb20gdGhhdCBmaWVsZCBzaXRlKSwgYW5kIHRoZW4gY29uZHVjdCB0aGUgc2FtZSBhbmFseXNlcyBzcGVjaWZpZWQgYWJvdmUgZm9yIFtIeXBvdGhlc2lzICMyXSB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcFsuLi5dIGJldHdlZW4gcG9yb3NpdHkgYW5kIGV4cGVyaWVuY2UgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS4gWy4uLl0gRm9yIEh5cG90aGVzaXMgIzQsIG91ciBtb2RlbHMgd2lsbCB0YWtlIHRoZSBmb2xsb3dpbmcgZm9ybTogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNCA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDQkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI0X3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNF9wb3JfdXMpCmBgYAoKYGBge3J9CnI0X3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNF9wb3JfZ2gpCmBgYAoKYGBge3J9CnI0X3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNF9wb3JfdGgpCmBgYAoKYGBge3J9CnI0X3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNF9wb3JfY2gpCmBgYAoKYGBge3J9CnI0X3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI0X3Bvcl92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKClVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIGFuZCBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyNF9tbV91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X21tX3VzKQpgYGAKCmBgYHtyfQpyNF9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2doKQpgYGAKCmBgYHtyfQpyNF9tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X21tX3RoKQpgYGAKCmBgYHtyfQpyNF9tbV9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2NoKQpgYGAKCmBgYHtyfQpyNF9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI0X21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI0X21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIE1hcnRoYSBTdG9yeSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMiwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgU2Vjb25kYXJ5IGV4cGxvcmF0b3J5IGFuYWx5c2VzCgojIyAiU2VjdWxhciIgZXhwZXJpZW5jZXMKCkZyb20gcHJlcmVnaXN0cmF0aW9uOiAiRmlyc3QsIGluIG9yZGVyIHRvIGV4cGxvcmUgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgYWZmaXJtYXRpb24gb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UsIHBvcm9zaXR5IGFuZCBhYnNvcnB0aW9uIGFyZSBzaW1wbHkgZHVlIHRvIHRoZSByZWxpZ2lvc2l0eSBvZiBwYXJ0aWNpcGFudHMsIHdlIHdpbGwgY29uZHVjdCBhZGRpdGlvbmFsIGFuYWx5c2VzIGZvY3VzaW5nIG9uIHRoZSB0d28g4oCcc2VjdWxhcuKAnSBleHBlcmllbmNlIHNjYWxlcyAodGhlIHJldmlzZWQgTGF1bmF5IFNsYWRlIHNjYWxlLCBNb3JyaXNvbiwgV2VsbHMgYW5kIE5vdGhhcmQgMjAwMF07IGFuZCB0aGUgU2hlZXAtR29hdCBbcGFyYW5vcm1hbF0gc2NhbGUsIFRoYWxib3JuZSAmIERlbGluLCAxOTkzKS4gVGhlc2UgYW5hbHlzZXMgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIHByaW1hcnkgYW5hbHlzZXMgb3V0bGluZWQgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXkgd2lsbCBvbmx5IGluY2x1ZGUgdGhlc2UgdHdvIOKAnHNlY3VsYXIgZXhwZXJpZW5jZeKAnSBzY2FsZXMgYW5kIG5vdCB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcy4gV2UgY29uc2lkZXIgdGhlc2UgdG8gYmUgZXhwbG9yYXRvcnkgYW5hbHlzZXMuIgoKIyMjIFBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzEKCmBgYHtyfQpkX3N0ZF9oMV9zZWMgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgdW5ldiwgZXhzZW4sIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDFfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMV9zZWMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgIGRfc3RkX2gxX3NlYykKIyBzdW1tYXJ5KHIxX3NlYykKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3NlY19zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfdW5ldl90b3RhbCwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMV9zZWNfc3VtCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgX3NlY3VsYXJfIGV4cGVyaWVuY2Ugd2FzIGFsc28gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvdyB0YWJsZSBhYm92ZSkuCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiYWJzIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEFic29ycHRpb24gc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gImV4c2VuIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBFeHRyYXNlbnNvcnkgc2NhbGUgKHJhbmdlOiAwLTcpLgoKVGhpcyB3YXMgYWN0dWFsbHkgYSAobnVtZXJpY2FsbHkpIF9zdHJvbmdlcl8gZWZmZWN0IHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGIgPSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHZzLiBiID0gYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgKS4gV2UgZGlkIG5vdCBwcm92aWRlIGEgcHJlZGljdGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYSA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYiA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfc2VjX3Bsb3RfYSwgaDFfc2VjX3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDJfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMl9zZWNfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDJfc2VjKQojIHN1bW1hcnkocjJfc2VjX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICBkX3N0ZF9oNSAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfcGxvdF9hIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9iIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X3Bsb3RfYSwgaDVfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDVfcGxvdF9jIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9wbG90X2QgPC0gZF9zdGRfaDUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2MsIGg1X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgIkNvbnRyb2wiIHNjYWxlcywgd2l0aG91dCByZXZlcnNlIGNvZGluZwoKVGhlIHR3byBjb250cm9sIHNjYWxlcyBhcmUgdGhlIG9ubHkgc2NhbGVzIHRoYXQgaGF2ZSByZXZlcnNlLWNvZGVkIGl0ZW1zISBUaGlzIGlzIHJlYWxseSB0b28gYmFkLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IGFjdHVhbGx5IGdvb2Qgd2F5cyB0byBhc3Nlc3MgYSB5ZXMtYmlhcy4KCkluIGFuIGF0dGVtcHQgdG8gcmVtZWR5IHRoaXMsIGhlcmUgSSByZS1zY29yaW5nIHRoZXNlIHNjYWxlcyBhZnRlciBfZHJvcHBpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtc18uCgojIyMgQ29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKCmBgYHtyfQpkX2N0bF9ub3JldiA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBmdWxsX2pvaW4oCiAgICBkX3N0ZCAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3JldiAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3JldiRwcmVkaWN0b3IpIDwtIGNiaW5kKGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9yX21tID0gYygwLCAwLCAtMSwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXYgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X25vcmV2X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gInNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9zZSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjVfbm9yZXZfc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKQWdhaW4sIGluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9hIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2IgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2EsIGg1X25vcmV2X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYyA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2QgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X25vcmV2X3Bsb3RfYywgaDVfbm9yZXZfcGxvdF9kLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9jdGxfbm9yZXZfYnlzaXRlIDwtIGQwICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBzdGFydHNfd2l0aCgicDdfaHRoayIpLCBzdGFydHNfd2l0aCgicDdfd29iIiksCiAgICAgICAgIC1jKGVuZHNfd2l0aCgiX2NhdCIpLCBlbmRzX3dpdGgoIl90b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIHNlbGVjdCgtYyhjb250YWlucygicmV2ZXJzZSIpKSkgJT4lICMgZHJvcCBRMSwgUTIsIFEzLCBRNCBmcm9tIHdvYiAKICBzZWxlY3QoLWMocDdfaHRoa19ub3QuZnVuLCBwN19odGhrX2xpbC5jaGFsbGVuZywgcDdfaHRoa19hdm9pZC50aGluaywKICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgIHA3X2h0aGtfbm90LmV4Y2l0aW5nLCBwN19odGhrX21lbnRhbC5lZmZydCwgcDdfaHRoa19qb2IuZG9uZSkpICU+JSAjIGRyb3AgUTMsIFE0LCBRNSwgUTcsIFE4LCBROSwgUTEyLCBRMTYsIFExNyBmcm9tIGh0aGsKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gaWZlbHNlKGdyZXBsKCJodGhrIiwgcXVlc3Rpb24pLCAiaHRoayIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgid29iIiwgcXVlc3Rpb24pLCAid29iIiwgTkEpKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUpICU+JQogIHN1bW1hcmlzZShzY29yZV9ub3JldiA9IHN1bShyZXNwb25zZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX25vcmV2X3N0ZCA9IHNjYWxlKHNjb3JlX25vcmV2LCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlIDwtIGZ1bGxfam9pbigKICBkX3N0ZF9ieXNpdGUgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGRfYnlzaXRlICU+JQogICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pICU+JQogICAgICBnYXRoZXIocHJlZGljdG9yLCBzY29yZSwgYyhhYnMsIHBvciwgbW0pKSwKICAgIGRfY3RsX25vcmV2X2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXZfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwcmVkaWN0b3IpIDwtIGNiaW5kKAogIGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICBhYnNfcG1tID0gYygyLCAwLCAtMSwgLTEsIDApLAogIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X2RzZV91cyA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX3RoKQoKcjVfYnlzaXRlX25vcmV2X2RzZV9jaCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpIZXJlIGFyZSBvdXIgcmVzdWx0cyBmb3IgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZToKCmBgYHtyfQpyNV9ieXNpdGVfbm9yZXZfc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9zZV9naCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKQoKcjVfYnlzaXRlX25vcmV2X3NlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpCgpyNV9ieXNpdGVfbm9yZXZfc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV92dCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMjEsIDMwKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDMxLCA0MCkgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDQxLCA1MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNywgNDcsIDEwKSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSBpbiBhbG1vc3QgYWxsIHNpdGVzKio6IEluIG1vc3Qgc2l0ZXMsIGFzIHByZWRpY3RlZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSksIHdoZXRoZXIgaW5kZXhlZCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgdXNpbmcgdGhlIERTRSBvciBTRSBzY2FsZXMuIEluIG90aGVyIHdvcmRzLCB0aGUgInByZWRpY3RvcnMgb2YgaW50ZXJlc3QiIChhYnNvcnB0aW9uIGFuZCB0aGUgdHdvIHBvcm9zaXR5IG1lYXN1cmVzKSB3ZXJlIGJldHRlciBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHRoYW4gb3VyIHR3byAiY29udHJvbCIgcHJlZGljdG9ycywgZXZlbiB3aGVuIHdlIG9ubHkgaW5jbHVkZWQgdGhlIG5vbi1yZXZlcnNlLWNvZGVkIGl0ZW1zIGZyb20gdGhlIHR3byAiY29udHJvbCIgcHJlZGljdG9ycy4gVGhlIG9ubHkgZXhjZXB0aW9ucyB0byB0aGlzIHdlcmUgR2hhbmEgd2hlbiB1c2luZyB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChmaXJzdCB0YWJsZSBhYm92ZSksIGFuZCBWYW51YXR1IHdoZW4gdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHNlY29uZCB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIiksCiAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHNjYWxlKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGZpbGwgPSBwcmVkX3R5cGUsIGNvbG9yID0gcHJlZF90eXBlKSwKICAgICAgICAgICAgICBtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfZGlzY3JldGUoKSArCiAgc2NhbGVfZmlsbF9kaXNjcmV0ZSgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIHR5cGUiLCBmaWxsID0gIlByZWRpY3RvciB0eXBlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIEJleW9uZCB0aGUgcHJlcmVnaXN0cmF0aW9uCgojIyBDb21iaW5lZCBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IG9uIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYWJzb3JwdGlvbiBjb250cm9sbGluZyBmb3IgcG9yb3NpdHkgJiB2aWNlIHZlcnNhKQoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpIZXJlIEkgZXhhbWluZSBhIGJpZyBtb2RlbCwgaW4gd2hpY2ggYm90aCBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSB0b2dldGhlciBwcmVkaWN0IHNwaXJpdHVhbCBleHBlcmllbmNlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbG9vayBhdCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5LCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLCBhbmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuIGludGVyYWN0aW9uIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkuIEkgbG9vayBhdCBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIGFuZCBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2VwYXJhdGVseSwgYW5kIHVzZSBib3RoIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhbmQgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZXMgdG8gaW5kZXggc3Bpcml0dWFsIGV4cGVyaWVuY2UuCgpgYGB7cn0KZF9zdGRfaDYgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfY3RyeSwgc2NhbGUpLCBmdW5zKGZhY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU6IAoKYGBge3J9CnI2X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBwN19jdHJ5ICogc2NhbGUgCiAgICAgICAgICAgICAgICsgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9wb3IpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI2X3BvcikkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjozLCA5KSwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6IAoKYGBge3J9CnI2X21tIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcDdfY3RyeSAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oNikKIyBzdW1tYXJ5KHI2X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNl9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjozLCA5KSwgYm9sZCA9IFQpCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBzZWUgZXZpZGVuY2UgZm9yIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGJlaW5nIHBvc2l0aXZlbHkgcmVsYXRlZCB0byBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgZXZlbiBhZnRlciBjb250cm9sbGluZyBmb3IgZWFjaCBvdGhlcioqOiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBwb3Jvc2l0eTsgYW5kIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgKGFzIGluZGV4ZWQgYnkgZWl0aGVyIHRoZSBEdWxpbiBzY2FsZSBvciB0aGUgTWFydGhhIFN0b3J5IHNjYWxlKSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIGFsc28gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSwgY29udHJvbGxpbmcgZm9yIGFic29ycHRpb24uIFRoZXJlIHdhcyBubyBzdHJvbmcgZXZpZGVuY2Ugb2YgYW4gaW50ZXJhY3RpdmUgZWZmZWN0IG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIGVpdGhlciBjYXNlIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4KCmBgYHtyfQpoNl9wbG90X2ExIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiUG9yb3NpdHkgKER1bGluKSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYjEgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBwb3IsIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiUG9yb3NpdHkgKER1bGluKSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQocGxvdF9ncmlkKGg2X3Bsb3RfYTEgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICBoNl9wbG90X2IxICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgcmVsX3dpZHRocyA9IGMoMiwgMSkpLAogICAgICAgICAgZ2V0X2xlZ2VuZChoNl9wbG90X2ExKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKYGBgCgpgYGB7cn0KaDZfcGxvdF9hMiA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IG1tLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIk1hcnRoYSBTdG9yeSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYjIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC44KSArCiAgc2NhbGVfY29sb3JfdmlyaWRpc19jKAogICMgc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiU3BlY3RyYWwiLAogICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyd2lkdGggPSAyMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2EyICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMiksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfaDZfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIGZ1bGxfam9pbihkX3N0ZF9ieXNpdGUgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfY3RyeSwgc2NhbGUpLCBmdW5zKGZhY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDZfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g2X2J5c2l0ZSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpIZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZTogCgpgYGB7cn0KcjZfYnlzaXRlX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdXMpCgpyNl9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9naCkKCnI2X2J5c2l0ZV9wb3JfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3RoKQoKcjZfYnlzaXRlX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfY2gpCgpyNl9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNl9ieXNpdGVfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA4KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDksIDE2KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDE3LCAyNCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAyNSwgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAzMywgNDApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDM0LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCAzNSwgOCkpLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZTogCgpgYGB7cn0KcjZfYnlzaXRlX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdXMpCgpyNl9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9naCkKCnI2X2J5c2l0ZV9tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX3RoKQoKcjZfYnlzaXRlX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fY2gpCgpyNl9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNl9ieXNpdGVfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA5LCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAxNywgMjQpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMjUsIDMyKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMzMsIDQwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAzNCwgOCkpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMywgMzUsIDgpKSwgYm9sZCA9IFQpCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBzZWUgc29tZSBldmlkZW5jZSBmb3IgcG9yb3NpdHkgInN3YW1waW5nIG91dCIgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGluIHNvbWUgc2l0ZXMqKiwgaW5jbHVkaW5nIEdoYW5hLCBDaGluYSwgYW5kIFZhbnVhdHUgd2hlbiBwb3Jvc2l0eSBpcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOyBhbmQgdGhlIFVTLCBHaGFuYSwgYW5kIFZhbnVhdHUgd2hlbiBwb3Jvc2l0eSBpcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUgKGluIGZhY3QsIGluIHRoaXMgc2Vjb25kIHNldCBvZiBhbmFseXNlcywgbmVpdGhlciBBYnNvcnB0aW9uIG5vciBNYXJ0aGEgU3RvcnkgZW5kcyB1cCBiZWluZyBhIHNpZ25pZmljYW50IHByZWRpY3RvciBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSBpbiBHaGFuYSBvciBWYW51YXR1KS4KCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQWJzb3JwdGlvbiBhcyBwcmltYXJpbHkgaW5kaXZpZHVhbCBkaWZmZXJlbmNlLCBwb3Jvc2l0eSBhcyBwcmltYXJpbHkgY3VsdHVyYWwgZGlmZmVyZW5jZT8KCkluIG91ciB0aGVvcml6aW5nLCB3ZSBvZnRlbiBhc3N1bWUgdGhhdCBhYnNvcnB0aW9uIGlzIHByaW1hcmlseSBhbiBpbmRpdmlkdWFsIGRpZmZlcmVuY2UsIHdoaWxlIHBvcm9zaXR5IGlzIHByaW1hcmlseSBhIGN1bHR1cmFsIGRpZmZlcmVuY2XigJRvciBhdCBsZWFzdCB0aGF0IGFic29ycHRpb24gaXMgbW9yZSBvZiBhbiBpbmRpdmlkdWFsIGRpZmZlcmVuY2UgdGhhbiBpcyBwb3Jvc2l0eS4gRG8gd2Ugc2VlIGFueSBldmlkZW5jZSBvZiB0aGlzIGluIHRoaXMgZGF0YXNldD8KCiMjIyBEbyBpbmRpdmlkdWFscyB2YXJ5IG1vcmUgaW4gYWJzb3JwdGlvbiB0aGFuIHBvcm9zaXR5PwoKVGhlIGZpcnN0IHdheSBJIHRob3VnaHQgb2YgdG8gYXBwcm9hY2ggdGhpcyBxdWVzdGlvbiBpcyB0byBsb29rIGF0IHRoZSBkZWdyZWUgdG8gd2hpY2ggaW5kaXZpZHVhbHMgdmFyeSBpbiBlYWNoIG9mIHRoZXNlIHRocmVlIHNjYWxlcyAoQWJzb3JwdGlvbiwgUG9yb3NpdHkgKER1bGluKSwgYW5kIE1hcnRoYSBTdG9yeSkuIFdlIHdvdWxkIHByZWRpY3QgdGhhdCBhYnNvcnB0aW9uIHdvdWxkIHZhcnkgbW9yZSBhY3Jvc3MgaW5kaXZpZHVhbHMgdGhhbiBlaXRoZXIgb2YgdGhlIHBvcm9zaXR5IGluZGljZXMgKGFmdGVyIHJlc2NsYWluZyBhbGwgdGhyZWVlIHNjYWxlcyB0byBoYXZlIHRoZSBzYW1lIHJhbmdlLCB3aXRoaW4gZWFjaCBzaXRlKS4KCmBgYHtyfQpkX3Zhcl9ieXNpdGUgPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoY29udGFpbnMoInRvdGFsIikpLCAKICAgICAgICAgICAgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGMocDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgbXV0YXRlKHNjb3JlID0gc2NhbGUoc2NvcmUsIHNjYWxlID0gRikpICU+JSAjIGNlbnRlciBhdCAwCiAgdW5ncm91cCgpCmBgYAoKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFic29ycHRpb24gdnMuIFBvcm9zaXR5IChEdWxpbikiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlVTIikpCgpwcmludCgiR2hhbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCgpwcmludCgiVmFudWF0dSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWJzb3JwdGlvbiB2cy4gTWFydGhhIFN0b3J5IikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiRHVsaW4gdnMuIE1hcnRoYSBTdG9yeSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIlVTIikpCgpwcmludCgiR2hhbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCgpwcmludCgiVGhhaWxhbmQiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCgpwcmludCgiVmFudWF0dSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyfQpkX3Zhcl9ieXNpdGUgJT4lCiAgZ3JvdXBfYnkoc2NhbGUsIHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZSh2YXJpYW5jZSA9IHJvdW5kKHZhcihzY29yZSwgbmEucm0gPSBUKSwgMykpICU+JQogIGFycmFuZ2UocDdfY3RyeSwgc2NhbGUpICU+JQogIHNwcmVhZChzY2FsZSwgdmFyaWFuY2UpCmBgYAoKQWNjb3JkaW5nIHRvIEJhcnRsZXR0IHRlc3RzIG9mIGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlcywgdGhlIG9ubHkgc2l0ZSB3aGVyZSB3ZSBzZWUgdGhlIHBhdHRlcm4gdGhhdCB3ZSdkIGV4cGVjdCBpcyBWYW51YXR1OiBJbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IG1vcmUgaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBQb3Jvc2l0eSAoRHVsaW4pIHNjb3JlcyBvciBNYXJ0aGEgU3Rvcnkgc2NvcmVzLiBJbiBDaGluYSwgaW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBtb3JlIGluIHRoZWlyIEFic29ycHRpb24gc2NvcmVzIHRoYW4gaW4gdGhlaXIgTWFydGhhIFN0b3J5IHNjb3JlcywgYnV0IHZhcmlhbmNlIHdhcyBlcXVhbCBhY3Jvc3MgdGhlIEFic29ycHRpb24gYW5kIFBvcm9zaXR5IHNjb3Jlcy4gSW4gR2hhbmEsIHdlIGFjdHVhbGx5IHNhdyB0aGUgcmV2ZXJzZSBwYXR0ZXJuIHRvIHdoYXQgd2UnZCBleHBlY3Q6IEluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgX2xlc3NfIGluIHRoZWlyIEFic29ycHRpb24gc2NvcmVzIHRoYW4gaW4gdGhlaXIgTWFydGhhIFN0b3J5IHNjb3JlcyAoYW5kIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEFic29ycHRpb24gYW5kIFBvcm9zaXR5IChEdWxpbikgYWxzbyB3ZW50IGluIHRoZSBzYW1lIGRpcmVjdGx5LCBhbHRob3VnaCBpdCB3YXMgbm90IHNpZ25pZmljYW50KS4KCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC4zLCBpbmNsdWRlID0gVH0KZF92YXJfYnlzaXRlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIGNvbG9yID0gc2NhbGUsIGZpbGwgPSBzY2FsZSkpICsKICBmYWNldF93cmFwKH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBuY29sID0gNSkgKwogIGdlb21fZGVuc2l0eShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC4yKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb25zIiwKICAgICAgIHggPSAiU2NvcmUgKGFkanVzdGVkIHRvIHNoYXJlIGNvbW1vbiByYW5nZSBhbmQgYmUgY2VudGVyZWQgYXQgMCwgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIiwKICAgICAgIGNvbG9yID0gIlNjYWxlIiwgZmlsbCA9ICJTY2FsZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBUfQpkX3Zhcl9ieXNpdGUgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIHN1bW1hcmlzZSh2YXJpYW5jZSA9IHZhcihzY29yZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY2FsZSwgeSA9IHZhcmlhbmNlLCBjb2xvciA9IHNjYWxlKSkgKwogIGZhY2V0X2dyaWQofiBwN19jdHJ5KSArCiAgZ2VvbV9wb2ludChzaG93LmxlZ2VuZCA9IEYsIHNpemUgPSAzKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJWYXJpYW5jZSBieSBzY2FsZSBhbmQgc2l0ZSIsCiAgICAgICB4ID0gIlNjYWxlIiwgeSA9ICJWYXJpYW5jZSAoYWZ0ZXIgYWRqdXN0aW5nIHNjb3Jlc1xudG8gc2hhcmUgY29tbW9uIHJhbmdlIGFuZFxuYmUgY2VudGVyZWQgYXQgMCwgd2l0aGluIGVhY2ggc2l0ZSIpCmBgYAoKKipNeSB0YWtlLWF3YXkgaGVyZSBpcyB0aGF0IHRoZXJlIGlzIF9ub18gc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgYW5hbHlzZXMgb2YgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2UgdGhhdCBpbmRpdmlkdWFscyAod2l0aGluIGEgc2l0ZSkgdmFyaWVkIG1vcmUgaW4gYWJzb3JwdGlvbiB0aGFuIGluIHBvcm9zaXR5LioqCgojIyMgRG8gc2l0ZSBkaWZmZXJlbmNlcyBhY2NvdW50IGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24/CgpUaGUgc2Vjb25kIHdheSBJIHRob3VnaHQgb2YgdG8gYXBwcm9hY2ggdGhpcyBxdWVzdGlvbiBpcyB0byBsb29rIGF0IHRoZSBhbW91bnQgb2YgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHNpdGUgZGlmZmVyZW5jZXMgZm9yIGluIGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NhbGVzIChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KS4gV2Ugd291bGQgcHJlZGljdCB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgd291bGQgZXhwbGFpbiBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24gKG5vIHJlc2NhbGluZyBuZWNlc3NhcnkgaGVyZSkuCgpgYGB7cn0KcjdfYWJzIDwtIGxtKHA3X2Fic190b3RhbCB+IHA3X2N0cnksIAogICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCksCiAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSAiY29udHIuc3VtIikpCgpyN19wb3IgPC0gbG0ocDdfcG9yX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSwKICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKCnI3X21tIDwtIGxtKHA3X21tX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCksCiAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKYGBgCgpOdW1lcmljYWxseSBzcGVha2luZywgdGhpcyBhcHBlYXJzIHRvIGJlIHRydWU6IEluIGEgc2V0IG9mIGxpbmVhciBtb2RlbHMsIHNpdGUgZGlmZmVyZW5jZXMgZXhwbGFpbiBvbmx5IGByIHN1bW1hcnkocjdfYWJzKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIEFic29ycHRpb24gc2NvcmVzLCB2cy4gYHIgc3VtbWFyeShyN19wb3IpJHIuc3F1YXJlZCAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgdmFyaWFuY2UgaW4gUG9yb3NpdHkgKER1bGluKSBzY29yZXMgYW5kIGByIHN1bW1hcnkocjdfbW0pJHIuc3F1YXJlZCAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgdmFyaWFuY2UgaW4gTWFydGhhIFN0b3J5IHNjb3Jlcy4KCkhlcmUsIEknbGwgdHJ5IHRvIGNvbXBhcmUgdGhlc2Ugc3RhdGlzdGljYWxseSAodXNpbmcgc2NvcmVzIGZvciBlYWNoIHNjYWxlIHRoYXQgaGF2ZSBiZWVuIHN0YW5kYXJkaXplZCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CmRfaDdfY29tcGFyZSA8LSBkX3N0ZCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtc3RhcnRzX3dpdGgoInA3IikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oN19jb21wYXJlJHA3X2N0cnkpIDwtIGNiaW5kKG5vblVTX1VTID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hWVF9USENIID0gYygwLCAxLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIX1ZUID0gYygwLCAxLCAwLCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhfQ0ggPSBjKDAsIDAsIC0xLCAxLCAwKSkKY29udHJhc3RzKGRfaDdfY29tcGFyZSRzY2FsZSkgPC0gY2JpbmQocG1tX2FicyA9IGMoLTIsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIC0xLCAxKSkKCnI3X2NvbXBhcmUgPC0gbG1lcihzY29yZSB+IHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfaDdfY29tcGFyZSkKIyBzdW1tYXJ5KHI3X2NvbXBhcmUpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI3X2NvbXBhcmUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg4OjExLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudDogSSB0aGluayB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhhdCBJIGhhdmUgYm9sZGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzdWdnZXN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGFjcm9zcyBzaXRlcyAoaGVyZSwgY29kZWQgYXMgZGlmZmVyZW5jZXMgYmV0d2VlbiAoYSkgbm9uLVVTIGFuZCBVUyBzaXRlcywgKGIpIEdoYW5hIGFuZCBWYW51YXR1IHZzLiBUaGFpbGFuZCBhbmQgQ2hpbmEsIChjKSBHaGFuYSB2cy4gVmFudWF0dSwgYW5kIChkKSBUaGFpbGFuZCB2cy4gQ2hpbmEpIHdlcmUgZ2VuZXJhbGx5IGV4YWdnZXJhdGVkIGluIHRoZSB0d28gcG9yb3NpdHkgc2NhbGVzIGNvbXBhcmVkIHRvIHRoZSBBYnNvcnB0aW9uIHNjYWxlLCBhbmQgdGhlc2Ugc2VlbXMgdG8gYmUgdHJ1ZSBmcm9tIHRoZSBmb2xsb3dpbmcgcGxvdDoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9oN19jb21wYXJlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCguIH4gc2NhbGUpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhYmlsaXR5IGFjcm9zcyBzaXRlcyBieSBzY2FsZSIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgX2lzXyBwcmV0dHkgc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgcmVzcmVzc2lvbiBhbmFseXNlcyB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24uKioKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUmVsaWdpb3NpdHkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKRG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBzdGlsbCBob2xkIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHBhcnRpY2lwYW50cycgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eT8KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45fQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgICBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RlbV9ob3cuc3BydC5yZWxnLCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIiwgCiAgICAgICB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KZF9zdGRfcmVsaWcgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykgJT4lCiAgbXV0YXRlKHJlbGlnX3N0ZCA9IHNjYWxlKHA3X2RlbV9ob3cuc3BydC5yZWxnLCBzY2FsZSA9IFQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQpCgpkX2g4IDwtIGRfc3RkX3JlbGlnICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX2g4JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDgkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX2g4KQojIHN1bW1hcnkocjhfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpyOF9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHJlbGlnX3N0ZCAqIHNjYWxlICogcDdfY3RyeSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDI6NCwgYm9sZCA9IFQpCmBgYAoKRm9sbG93aW5nIG90aGVyIGFuYWx5c2lzLCBJIGV4YW1pbmVkIHRoaXMgc2VwYXJhdGVseSB1c2luZyBQb3Jvc2l0eSAoRHVsaW4pIGFuZCBNYXJ0aGEgU3RvcnkgYXMgaW5kaWNlcyBvZiBwb3Jvc2l0eS4gSW4gYm90aCBjYXNlcywgcmVsaWdpb3NpdHkgd2FzIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIChhcyB3ZSdkIGV4cGVjdCkuIEJ1dCwgaW1wb3J0YW50bHksIHRoZSBtYWluIGVmZmVjdHMgb2YgcG9yb3NpdHkgcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIGFuYWx5c2VzLCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiBUaGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiByZW1haW5lZCBzaWduaWZpY2FudGx5IHBvc2l0aXZlIHdoZW4gcG9yb3NpdHkgd2FzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSAoc2Vjb25kIHRhYmxlKSwgYnV0IG5vdCB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoaXMgZWZmZWN0IHRvIGJlICJtYXJnaW5hbGx5IHNpZ25pZmljYW50IikuCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgb2JzZXJ2ZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LCBvbiB0aGUgb25lIGhhbmQsIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgb24gdGhlIG90aGVyLioqCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSkKCmRfaDhfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOF9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9oOF9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpCgpyOF9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKQoKcjhfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl90aCkKCnI4X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpCgpyOF9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyOF9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdXMpCgpyOF9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpCgpyOF9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpCgpyOF9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fY2gpCgpyOF9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkkgc2VlIHR3byBnZW5lcmFsIHBhdHRlcm5zIGhlcmU6CgoxLiBJbiB0aGUgVVMsIFRoYWksIGFuZCBDaGluZXNlIHNhbXBsZXMsIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgcmVsaWdpb3NpdHkgYWxsIHJlbWFpbiBzaWduaWZpY2FudCBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHdoZW4gY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIgaW4gb25lIG9mIHRoZSB0d28gYW5hbHlzZXMgcmVwb3J0ZWQgYWJvdmUuIEluIHRoZSBvdGhlciBhbmFseXNpcywgdGhlcmUgaXMgc29tZSBldmlkZW5jZSBmb3IgInN3YW1waW5nIG91dCI6IEluIHRoZSBVUyBhbmQgQ2hpbmVzZSBzYW1wbGVzLCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzOyBhbmQgaW4gVGhhaWxhbmQsIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRob3VnaCwgKipJJ2Qgc2F5IHRoaXMgaXMgbW9kZXJhdGUgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBkb2VzIF9ub3RfIGZ1bGx5ICJleHBsYWluIGF3YXkiIHRoZSBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIHRoZXNlIHRocmVlIHNpdGVzICh0aGUgVVMsIFRoYWlsYW5kLCBhbmQgQ2hpbmEpLioqCjIuIEluIEdoYW5hIGFuZCBWYW51YXR1LCBvbmx5IHJlbGlnaW9zaXR5IHJlbWFpbnMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gdGhlc2UgYW5hbHlzZXMuICoqVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBldmlkZW5jZSB0aGF0IHJlbGlnaW9zaXR5IF9kb2VzXyAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0d28gKGRldm91dGx5IENocmlzdGlhbikgc2l0ZXMgKEdoYW5hIGFuZCBWYW51YXR1KS4qKgoKVG8gaGVscCB3aXRoIG91ciBpbnRlcnByZXRhdGlvbiwgaGVyZSBhcmUgdGhlIGNvcnJlbGF0aW9ucyB3aXRoIHJlbGlnaW9zaXR5LCB0aGlzIHRpbWUgbG9va2luZyBhdCBzY29yZXMgc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGU6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnX2NvciA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkLCBhYnMsIHBvciwgbW0sIGRzZSwgc2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShhYnMgPSBjb3IocmVsaWdfc3RkLCBhYnMsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgcG9yID0gY29yKHJlbGlnX3N0ZCwgcG9yLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIG1tID0gY29yKHJlbGlnX3N0ZCwgbW0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgZHNlID0gY29yKHJlbGlnX3N0ZCwgZHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHNlID0gY29yKHJlbGlnX3N0ZCwgc2UsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBjb3JfcmVsaWcsIC1wN19jdHJ5KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlX3JlbGlnX2NvcikgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlbGlnX3N0ZCwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlLCBjb3JfcmVsaWcpICU+JSAKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbl94ID0gbWluKHJlbGlnX3N0ZCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95ID0gbWF4KHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeCA9IG1pbihtaW5feCkpICU+JQogICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZSh5ID0gbWF4KG1heF95KSkgJT4lCiAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiciA9ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChyb3VuZChjb3JfcmVsaWcsIDIpLCBuc21hbGwgPSAyKSksCiAgICAgICAgICAgICAgICAgeCA9IHgsIHkgPSB5KSwKICAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBhbHBoYSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiU2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXaGljaCBleHBlcmllbmNlcyBhcmUgcHJlZGljdGVkIGJ5IGFic29ycHRpb24gdnMuIHBvcm9zaXR5PwoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9leHAgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKICBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpIAogICMgIyByZXNjYWxlIGV2ZXJ5dGhpbmcgdG8gcnVuIGZyb20gMC0xCiAgIyBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKQpgYGAKCmBgYHtyfQpkX2V4cF9jb3IgPC0gZF9leHAgJT4lIAogIHNlbGVjdChwN19zdWJqLCBwN19hYnNfdG90YWwsIAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfYWJzX3RvdGFsKSkgJT4lCiAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShhYnNfY29yID0gY29yKHA3X2Fic190b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSAlPiUKICBmdWxsX2pvaW4oZF9leHAgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBwN19wb3JfdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfcG9yX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3JfY29yID0gY29yKHA3X3Bvcl90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0ZW4gbW9zdCBzdHJvbmdseSBjb3JyZWxhdGVkIGl0ZW1zIGZvciBlYWNoIG9mIG91ciB0aHJlZSBwcmVkaWN0b3JzIG9mIGludGVyZXN0IChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KToKCmBgYHtyLCBpbmNsdWRlID0gVH0KYmluZF9yb3dzKGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigxMCwgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpKSAlPiUKICBhcnJhbmdlKHdoaWNoX2NvciwgZGVzYyhhYnMoY29yKSkpICU+JQogIHNlbGVjdChjb3IsIHF1ZXN0aW9uX3RleHQsIHNjYWxlKSAlPiUKICByZW5hbWUoQ29ycmVsYXRpb24gPSBjb3IsIGBRdWVzdGlvbiB0ZXh0YCA9IHF1ZXN0aW9uX3RleHQsIFNjYWxlID0gc2NhbGUpICU+JQogIGthYmxlKGRpZ2l0cyA9IDMpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJBYnNvcnB0aW9uIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlBvcm9zaXR5IChEdWxpbikiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIk1hcnRoYSBTdG9yeSIsIDIxLCAzMCkKYGBgCgpBbmQgaGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgY29ycmVsYXRpb25zIG9mIHRoZXNlIHRocmVlIHByZWRpY3RvcnMgd2l0aCBhbGwgImV4cGVyaWVuY2UiIGl0ZW1zIGluIHRoaXMgcGFja2V0IChzcGlyaXR1YWwgYW5kIHNlY3VsYXIpOgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfZXhwX2NvciAlPiUKICAgICAgICAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA4MCkpLAogICAgICAgYWVzKHggPSBjb3IsIHkgPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIGRlc2Mob3JkZXIpKSwgCiAgICAgICAgICAgY29sb3IgPSB3aGljaF9jb3IpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQZWFyc29uIGNvcnJlbGF0aW9uICh0aGVvcmV0aWNhbCByYW5nZTogLTEgdG8gMSkiLAogICAgICAgeSA9ICJRdWVzdGlvbiAoYnkgc2NhbGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciIpCmBgYAoKIyMjIENvbnNpZGVyaW5nIGVhY2ggc2l0ZSBpbmRpdmlkdWFsbHkKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5OiBnb29kIHZzLiBiYWQgZW1vdGlvbnMKCmBgYHtyfQpkX21tIDwtIGQwICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX21tXyIpKSAlPiUKICBzZWxlY3QoLWMoZW5kc193aXRoKCJfY2F0IiksIGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoZW1vID0gY2FzZV93aGVuKGdyZXBsKCJfYW5nXyIsIHF1ZXN0aW9uKSB+ICJhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiX2Nhcl8iLCBxdWVzdGlvbikgfiAiY2FyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfZW52XyIsIHF1ZXN0aW9uKSB+ICJlbnZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgdmFsID0gY2FzZV93aGVuKGVtbyAlaW4lIGMoImFuZ2VyIiwgImVudnkiKSB+ICJuZWdhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbW8gPT0gImNhcmluZyIgfiAicG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICBlbW8gPSBmYWN0b3IoZW1vLCBsZXZlbHMgPSBjKCJhbmdlciIsICJlbnZ5IiwgImNhcmluZyIpKSwKICAgICAgICAgdmFsID0gZmFjdG9yKHZhbCwgbGV2ZWxzID0gYygibmVnYXRpdmUiLCAicG9zaXRpdmUiKSkpCgpjb250cmFzdHMoZF9tbSRwN19jdHJ5KSA8LSBjb250cmFzdHNfY3RyeV9lZmYKY29udHJhc3RzKGRfbW0kZW1vKSA8LSBjYmluZCgiX25lZ19wb3MiID0gYygxLCAxLCAtMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9lbnZfYW5nIiA9IGMoLTEsIDEsIDApKQpjb250cmFzdHMoZF9tbSR2YWwpIDwtIGNiaW5kKCJfbmVnX3BvcyIgPSBjKDAsIDEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC43LCBpbmNsdWRlID0gVH0KbW1fZW1vX3Bsb3RfYSA8LSBkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgeSA9IG1lYW5fc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbykgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzLCAxKSkgKwogIGxhYnModGl0bGUgPSAiTWVhbiByZXNwb25zZXMgdG8gTWFydGhhIFN0b3J5IHF1ZXN0aW9ucyBieSBlbW90aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIkVtb3Rpb24iLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgptbV9lbW9fcGxvdF9iIDwtIGRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8pICU+JQogIHN1bW1hcmlzZShtZWFuX3Njb3JlID0gbWVhbihyZXNwb25zZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc3VtX3Njb3JlID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCBlbW8pICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gcDdfY3RyeSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMywgMSkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIkVtb3Rpb24iLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgpwbG90X2dyaWQobW1fZW1vX3Bsb3RfYSwgbW1fZW1vX3Bsb3RfYiwgbmNvbCA9IDEpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjJ9CmRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8sIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksCiAgICAgICAgIHF1ZXN0aW9uX3R5cGUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfZmVlbC5odXJ0IiwgInA3X21tX2Nhcl9mZWwubm8ucHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X2ZlZWwuaHVydCIpIH4gCiAgICAgICAgICAgICAiYS4gaHVydC9oZWxwIHdpdGggZmVlbGluZ3MiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3RoZ3MuaHVydCIsICJwN19tbV9jYXJfdGhrLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl90aGdzLmh1cnQiKSB+IAogICAgICAgICAgICAgImIuIGh1cnQvaGVscCB3aXRoIGp1c3QgdGhvdWdodHMiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NwcnQuaHVydCIsICJwN19tbV9jYXJfc3BydC5oZWxwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9zcHJ0Lmh1cnQiKSB+IAogICAgICAgICAgICAgImMuIGh1cnQvaGVscCB2aWEgc3Bpcml0IiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19waHlzaWNhbCIsICJwN19tbV9jYXJfcGh5c2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3BoeXNpY2FsIikgfiAKICAgICAgICAgICAgICJkLiBwaHlzaWNhbGx5IHNpY2svd2VsbCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfc2lja25lc3MiLCAicDdfbW1fY2FyX2N1cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc2lja25lc3MiKSB+IAogICAgICAgICAgICAgImUuIGNhdXNlIikpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgCiAgICAgICAgICAgICB5ID0gbWVhbl9zY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocDdfY3RyeSB+IHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSwgc2NhbGVzID0gImZyZWVfeCIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdHlwZSwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDEpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgaXRlbSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJRdWVzdGlvbiB0eXBlIiwKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKZF9wYXNzX21iIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYSA8LSBkICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfcGFzc19tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4bHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpzY29yZXNfcGxvdF9wYXNzX2IgPC0gZF9wYXNzX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMi4yLCBpbmNsdWRlID0gVH0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpwbG90X2dyaWQoc2NvcmVzX3Bsb3RfcGFzc19hLCBzY29yZXNfcGxvdF9wYXNzX2IsIG5jb2wgPSAxKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCmRfYWxsX21iIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpzY29yZXNfcGxvdF9hbGxfYSA8LSBkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjIsIHdpZHRoID0gMC40LCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX2FsbF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9iIDwtIGRfYWxsX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9hbGxfYSwgc2NvcmVzX3Bsb3RfYWxsX2IsIG5jb2wgPSAxKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgSGlzdG9ncmFtcyBmb3IgZWFjaCBzY2FsZQoKIyMgQWJzb3JwdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gYWJzb3JwdGlvbiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZHNlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDM1LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwLCAzNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19kc2VfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gRFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNzApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTcGlyaXR1YWwgZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC05NikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19zZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3NlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19zZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDQ4LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDk2LCAyNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBTRSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgV2F5cyBvZiBiZWluZwoKIyMjIEFsbCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3dvYl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfd29iX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zNiwgMzYsIDE4KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zNiB0byAzNikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgojIyMgRXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIl93b2JfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSwgY29udGFpbnMoInJldmVyc2UiKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX2N0bF9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gIndvYiIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjgsIDI4LCAxNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgVW5jb21tb24gZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfdW5ldl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfdW5ldl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA5LCB5ID0gMC4yMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE4LCA5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJVbmNvbW1vbiBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTE4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3VuZXZfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBVTkVWIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBFeHRyYXNlbnNvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2V4c2VuX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2V4c2VuX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4zMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcsIDEpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkV4dHJhc2Vuc29yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBFWFNFTiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIYXJkIHRoaW5raW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfaHRoa190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfaHRoa190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM4LCAzOCwgMTkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM4IHRvIDM4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX2h0aGtfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogICAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCAKICAgICAgICAgICAgICBwN19odGhrX2pvYi5kb25lKSkgJT4lIAogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiaHRoayIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yMCwgMjAsIDEwKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3Bvcl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfcG9yX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFBPUiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgTWFydGhhIHN0b3J5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X21tX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gTU0gc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC01NCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgRGVtb2dyYXBoaWNzCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX3NleCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgY291bnQocDdfZGVtX3NleCkgJT4lCiAgbXV0YXRlKHByb3AgPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChwN19kZW1fc2V4LCBwcm9wKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKSW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhIF92ZXJ5XyBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCBhIHNsaWdodCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVmFudWF0dSB3ZXJlIGZlbWFsZS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAK